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

来源:互联网 发布:安卓温度报警器源码 编辑:程序博客网 时间:2024/05/17 09:30

最近项目中有个需求,使用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
原创粉丝点击