ITPub博客

首页 > IT职业 > IT生活 > 禁止滑动的NoScrollViewPager

禁止滑动的NoScrollViewPager

IT生活 作者:daxuesheng 时间:2021-09-09 09:48:41 0 删除 编辑

大家经常会使用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;
}@Overridepublic void scrollTo(int x, int y) {    super.scrollTo(x, y);
}@Overridepublic boolean onTouchEvent(MotionEvent arg0) {    if (noScroll)        return false;    else
        return super.onTouchEvent(arg0);
}@Overridepublic boolean onInterceptTouchEvent(MotionEvent arg0) {    if (noScroll)        return false;    else
        return super.onInterceptTouchEvent(arg0);
}@Overridepublic void setCurrentItem(int item, boolean smoothScroll) {    super.setCurrentItem(item, smoothScroll);
}@Overridepublic 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了!!!
我也就个人理解,,欢迎大家指正!

原文链接:http://www.apkbus.com/blog-842132-76752.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4692/viewspace-2812858/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-22

  • 博文量
    176
  • 访问量
    24988