android listview下滑出現回到頂部的按鈕

因為ScrollView本身沒有帶onScrollListener的監聽回調事件,所以,首先要重寫ScrollView,下面給出代碼
MyScrollView.java

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);  
    }  
      
      
  
}  

下面是主程序中的部分代碼

首先在XML文件中加入MyScrollView控件


第二步寫一個類繼承MyScrollView裡頭的回調接口

class onMyScrollListener implements com.scnu.yxp.travelapp.view.MyScrollView.OnScrollListener
	{

		@Override
		public void onScroll(int scrollY) {
			//當滑動的距離大於多少時執行相應的動作
			if(scrollY >= homepage_btn_window.getHeight())
			{
				upBtn.setVisibility(View.VISIBLE);
			}else{
				upBtn.setVisibility(View.GONE);
			}
		}
		
	}

第三步,設置監聽器

	onMyScrollListener listener = new onMyScrollListener();
	myScrollView.setOnScrollListener(listener);

到這裡就可以瞭
下面上個圖

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *