禁止滑动的NoScrollViewPager [复制链接]

2017-12-27 10:12
yileiforever 阅读:522 评论:1 赞:0
Tag:  

大家经常会使用ViewPager+Fragment,然后在fragment中会有左右滑动的view,当view滑动到最右边时会自动滑到viewpager的下一个item,如果项目要求ViewPager禁止自动滑动,这自定义的ViewPager就对你有用了!

public class NoScrollViewPager extends ViewPager {

private boolean noScroll = false;

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

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

public void setNoScroll(boolean noScroll) {
    this.noScroll = noScroll;
}

@Override
public void scrollTo(int x, int y) {
    super.scrollTo(x, y);
}

@Override
public boolean onTouchEvent(MotionEvent arg0) {
    if (noScroll)
        return false;
    else
        return super.onTouchEvent(arg0);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
    if (noScroll)
        return false;
    else
        return super.onInterceptTouchEvent(arg0);
}

@Override
public void setCurrentItem(int item, boolean smoothScroll) {
    super.setCurrentItem(item, smoothScroll);
}

@Override
public void setCurrentItem(int item) {
    super.setCurrentItem(item);
}

}

用法 在xml中引入,在activity中viewpager.setNoScroll(true);就行了

其实就是处理了一下点击事件,
public boolean onInterceptTouchEvent(MotionEvent ev)
该方法用户拦截被传递过来的事件,用于判断被传递过来的事件是否需要被当前的view进行处理。

 return false : 不对事件进行拦截,放行该事件。事件会被传递到当前view的子控件中,由子控件中的dispatchTouchEvent方法进行分发处理。
 return true : 拦截该事件,将该事件交给当前view的onTouchEvent方法进行处理。
 return super.inInterceptTouchEvent(ev):默认拦截方式,和return true一样。该事件会被拦截,将该事件交给当前view的onTouchEvent方法进行处理。

我的理解是NoScrollViewPager中的onInterceptTouchEvent方法返回了了false,则没有消费此事件,会想下传递,但是他又没有子View了!!!
我也就个人理解,,欢迎大家指正!

分享到:
我来说两句
facelist
您需要登录后才可以评论 登录 | 立即注册
所有评论(1)
戈英祯 2018-1-3 15:12
我是打酱油的
回复

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )