ScrollView滾動後顯示按鈕並點選置頂的解決方案
阿新 • • 發佈:2019-02-14
隨著APP資料量的增大,電商APP的興起,大家會經常使用到ScrollView,但是有時候我們滑下資料的時候會出現一個問題,那就當我們資料量太多時,我們無法快速的定位回ScrollView的頂部,以至於操作相同的資料導致我們興致缺缺,所以誕生了一系列的輔助操作,今天我就帶大家來探索淘寶的商品詳情下的置頂按鈕的開發流程:
第一步、我們先自定義一個ScorllView,這個自定義的ScrollView完成以下功能:
1.監聽ScrollView 的onScrollChanged 滾動改變回調
2.當滾動距離大於某個值時顯示置頂按鈕(即我們顯示圖片)
3.當點選置頂按鈕時能讓ScrollView滑動到頂部
先貼上程式碼:
/** * 跳轉置頂的ScrollView */ public class GoTopScrollView extends ScrollView implements View.OnClickListener { //展示置頂的圖片按鈕 private ImageView goTopBtn; //螢幕高度 //預設高度為500 private int screenHeight=500; public GoTopScrollView(Context context, AttributeSet attrs) { super(context, attrs); } //1.0//設定滑動到多少出現 public void setScreenHeight(int screenHeight) { this.screenHeight = screenHeight; } //2.0 //設定滾動置頂按鈕以及其點選監聽事件 public void setImgeViewOnClickGoToFirst(ImageView goTopBtn) { this.goTopBtn = goTopBtn; this.goTopBtn.setOnClickListener(this); } //3.0 //重寫滾動改變返回的回撥// l oldl 分別代表水平位移 // t oldt 代表當前左上角距離Scrollview頂點的距離 @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); /** * 滑動距離超過500px,出現置頂按鈕,可以做為自定義屬性 * 滑動距離如果使用者設定了使用使用者的 如果使用者沒有設定使用預設的 */ //3.1 //當 當前的左上角距離頂點距離 大於某個值的時候就顯現置頂按鈕出來 如果小雨某個值就隱藏 if (screenHeight != 0) { if (t > screenHeight) { goTopBtn.setVisibility(VISIBLE); } else { goTopBtn.setVisibility(GONE); } } } //4.0 //置頂按鈕的點選事件監聽 @Override public void onClick(View v) { //滑動到ScrollView的頂點 this.smoothScrollTo(0, 0); } }
下面我們來解釋上面的程式碼:
1.0:是提供給初始化的時候設定滑動距離的方法,我們可以設定任意值(除零外),如果不設定預設值為500
2.0:這裡我們設定了圖片按鈕在當前類的引用物件、並設定圖片按鈕的點選事件
3.0:重寫當前ScrollView滑動位置改變的回撥,回撥方法中我們判斷滑動的左上角的y軸離頂點的距離進行判斷,展示圖片按鈕
4.0:當我們點選圖片按鈕的時候,我們設定滑動當前的ScrollView到頂點位置(0,0)為頂點左上角的座標
第二步:我需要實現.activity_main.xml:
我們先來看一下xml檔案的hierarchyviewer(層級):
大家很容易就能看到 其實就是一個相對佈局包裹著自定的ScrollView和我們置頂的圖案佈局,置頂的圖片我們設定位於右下角,其實可以用FramentLayout來包裹,大家可以自己嘗試一下,講置頂圖片寫在最後是不會遮蓋的。
如下為完成程式碼:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.example.administrator.gotoscrollview.GoTopScrollView android:id="@+id/go_top_scrollView" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="65sp" /> </LinearLayout> </com.example.administrator.gotoscrollview.GoTopScrollView> <!-- 返回頂部 預設是隱藏的 寬高是為了讓大家看起來顯眼設定的--> <ImageView android:id="@+id/iv_return_top" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="10dp" android:layout_marginRight="10dp" android:src="@mipmap/return_top" android:visibility="gone" /> </RelativeLayout>
第三步:我們需要在頁面展示出來
public class MainActivity extends AppCompatActivity { //Scrollview private GoTopScrollView mGoTopScrollView; private ImageView ivReturnTop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.0初始化ScrollView mGoTopScrollView= (GoTopScrollView) findViewById(R.id.go_top_scrollView); //2.0初始化置頂Icon ivReturnTop= (ImageView) findViewById(R.id.iv_return_top); //3.0設定點選置頂的ImageView mGoTopScrollView.setImgeViewOnClickGoToFirst(ivReturnTop); //4.0獲取螢幕高度 int screenHeight=ScreenUtil.getScreenSize(getApplicationContext())[1]; //設定ScrollView滑動多少距離就顯示,低於多少就顯示 如果沒有設定就預設為500;(這裡我們設定螢幕高度) mGoTopScrollView.setScreenHeight(screenHeight); } }這段程式碼比較簡單、我就不詳細說了。