NoScrollViewPager解决嵌套listView依然可以滑动的问题

最近项目中有个需求,使用ViewPager嵌套Fragment,有的Fragment中有listView,ViewPager不可以进行滑动。开始只是重写它的onInterceptHoverEvent与onTouchEvent方法,使之返回false。但是不是这么简单,我们依然可以发现在有listView以及类似的列表控件时,都会让ViewPager有顿顿的滑动效果。并不是屏蔽它的事件分发与处理就可以解决。

于是我简单的下ViewPager的源码,发现scrollTo这个方法不止会在onTouchEvent中进行调用,在其他方法中也会有调用,如setCurrentItemInternal中也会调用。于是我就想会不会因为这个而影响了,我便重写了scrollTo方法,并做了判断,果然有效

上code

public class NoScrollViewPager extends ViewPager {
    private static final String TAG = "NoScrollViewPager";
    private int mWith;

    public NoScrollViewPager(Context context) {
        super(context);
        initData();
    }

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

    private void initData() {
        int[] screenWithAndHeight = ScreenUtils.getScreenWithAndHeight((Activity) getContext());
        mWith = screenWithAndHeight[0];
    }

    @Override
    public boolean onInterceptHoverEvent(MotionEvent event) {
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return false;
    }

    @Override
    public void scrollBy(int x, int y) {
        Log.e(TAG, "scrollBy");
        super.scrollBy(x, y);
    }

    @Override
    public void scrollTo(int x, int y) {
        Log.e(TAG, "scrollTo-x=" + x);
        Log.e(TAG, "scrollTo-y=" + y);
        if (x % mWith != 0) {
            return;
        }
        super.scrollTo(x, y);
    }

    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item, false);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值