首页 > 代码库 > android listview下滑出现回到顶部的按钮

android listview下滑出现回到顶部的按钮

<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
	{

		@Override
		public 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下滑出现回到顶部的按钮