標籤:android xml android listview java
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:14px;">因為ScrollView本身沒有帶onScrollListener的監聽回調事件,所以,首先要重寫ScrollView,下面給出代碼</span></span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:14px;">MyScrollView.java</span></span>
<span style="font-size:14px;">import android.content.Context;import android.os.Handler;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ScrollView;public class MyScrollView extends ScrollView { private OnScrollListener onScrollListener; //用在使用者手指離開MyScrollView,MyScrollView還在繼續滑動,用來儲存Y的距離 private int lastScrollY; public MyScrollView(Context context) { this(context, null); } public MyScrollView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } //寫一個onScrollListener的監聽回調方法 public void setOnScrollListener(OnScrollListener onScrollListener) { this.onScrollListener = onScrollListener; } //用於使用者手指離開MyScrollView的時候擷取MyScrollView滾動的Y距離,然後回調給onScroll方法中 private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { int scrollY = MyScrollView.this.getScrollY(); //此時的距離和記錄下的距離不相等,在隔5毫秒給handler發送訊息 if(lastScrollY != scrollY){ lastScrollY = scrollY; handler.sendMessageDelayed(handler.obtainMessage(), 5); } if(onScrollListener != null){ onScrollListener.onScroll(scrollY); } }; }; /** * 重寫onTouchEvent, 當使用者的手在MyScrollView上面的時候, * 直接將MyScrollView滑動的Y方向距離回調給onScroll方法中,當使用者抬起手的時候, * MyScrollView可能還在滑動,所以當使用者抬起手我們隔5毫秒給handler發送訊息,在handler處理 * MyScrollView滑動的距離 */ @Override public boolean onTouchEvent(MotionEvent ev) { if(onScrollListener != null){ onScrollListener.onScroll(lastScrollY = this.getScrollY()); } switch(ev.getAction()){ case MotionEvent.ACTION_UP: handler.sendMessageDelayed(handler.obtainMessage(), 5); break; } return super.onTouchEvent(ev); } //滾動的回調介面 public interface OnScrollListener{ //返回滑動的Y的距離 public void onScroll(int scrollY); } } </span>下面是主程式中的部分代碼
首先在XML檔案中加入MyScrollView控制項
<span style="font-size:14px;"><com.scnu.yxp.travelapp.view.MyScrollView <span style="white-space:pre"></span>android:id="@+id/scrollView"<span style="white-space:pre"></span>android:layout_width="match_parent" android:layout_height="wrap_content"android:background="#fff" /></span>
第二步寫一個類繼承MyScrollView裡頭的回調介面
<span style="font-size:14px;">class onMyScrollListener implements com.scnu.yxp.travelapp.view.MyScrollView.OnScrollListener{@Overridepublic void onScroll(int scrollY) {//當滑動的距離大於多少時執行相應的動作if(scrollY >= homepage_btn_window.getHeight()){upBtn.setVisibility(View.VISIBLE);}else{upBtn.setVisibility(View.GONE);}}}</span>
第三步,設定監聽器
<span style="font-size:14px;"><span style="white-space:pre"></span>onMyScrollListener listener = new onMyScrollListener();myScrollView.setOnScrollListener(listener);</span>
到這裡就可以了
下面上個圖
android listview下滑出現回到頂部的按鈕