Android ScrollView的滑动监听

在Android开发中,很多时候都要用到ScrollView来进行页面的滚动效果。那如果可以监听到用户的滚动状态来分别进行设置页面效果,APP的外观上肯定是可以加分的。

原生的ScrollView并没有实现类似ListView的onScrollListener的接口,在开发中如果需要监听ScrollView滑动状态,比如滑动到顶部(底部),滑动的距离等等,我们需要v4包下的NestedScrollView,或使用自定义View继承自ScrollView并设置监听的接口方法。

一、使用NestedScrollView

    重写setOnScrollChangeListener方法,有五个参数:
    第一个参数NestedScrollView v:是NestedScrollView的对象
    第二个参数:scrollX是目前的(滑动后)的X轴坐标
    第三个参数:ScrollY是目前的(滑动后)的Y轴坐标
    第四个参数:oldScrollX是之前的(滑动前)的X轴坐标
    第五个参数:oldScrollY是之前的(滑动前)的Y轴坐标
scrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
            @Override
            public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            } 
            });

注意:这里的单位是像素,如果需要得到滑动的距离需要对像素进行转换成px或dp

//将像素转换为px
public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

//将px转换为dp
public static int px2dp(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

二、使用自定义View继承自ScrollView

ScrollView的滚动监听事件不适用与低版本api, 所以使用自定义scrollview,自定义接口进行滚动监听。

//使用自定义view继承自ScrollView
public class MyScrollView extends ScrollView {

    private OnScrollListener listener;

    public void setOnScrollListener(OnScrollListener listener) {
        this.listener = listener;
    }

    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    //设置接口
    public interface OnScrollListener{
        void onScroll(int scrollY);
    }

    //重写原生onScrollChanged方法,将参数传递给接口,由接口传递出去
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if(listener != null){

            //这里我只传了垂直滑动的距离
            listener.onScroll(t);
        }
    }
}

设置页面布局的时候我们就可以使用自定义的ScrollView了

同样的这里的四个参数想必大家都能够知道是什么了!!!
 1. 第一个参数是目前水平滑动后的距离    
 2. 第二个参数是目前垂直滑动后的距离    
 3. 第三个参数是之前水平滑动前的距离
 4. 第四个参数是之前水平滑动前的距离

同样的这里的单位也是dip像素,所以还需要用到上面的单位转换工具


滑动监听

这样我们就可以进行滑动监听了,我这里设置的是当我滑动到屏幕的520dp时,进行控件背景的改变。

滑动监听进行背景改变

这是我的滑动监听,搜索框的背景进行改变。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值