美文网首页Android开发Android知识Android技术知识
适用于作为tab的ViewPager,不能滚动并且没有滚动效果

适用于作为tab的ViewPager,不能滚动并且没有滚动效果

作者: JC_Hou | 来源:发表于2016-09-30 09:49 被阅读153次

自定义ViewPager继承系统的ViewPager

  • 重写setCurrentItem()方法实现取消滚动效果
//去除滚动效果
@Override
public void setCurrentItem(int item, boolean smoothScroll) {
    super.setCurrentItem(item, smoothScroll);
}
@Override
public void setCurrentItem(int item) {
    super.setCurrentItem(item, false);
}```
- 重写时间拦截和touchEvent()实现禁止滚动

//禁止滚动
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (canloop) {//如果可以滚动,不消费事件,继续往下传事件
return super.onInterceptTouchEvent(ev);
} else {//如果不可以滚动,事件传给上级的onTouchEvent
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (canloop) {//如果可以滚动,不消费事件,往下传
return super.onTouchEvent(ev);
} else {//如果不可以滚动,事件传给上级的onTouchEvent
return false;
}
}```

完整代码
public class NoScrollViewPager extends ViewPager {
    private boolean canloop = false;
    public NoScrollViewPager(Context context) {
        super(context);
    }
    public NoScrollViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
   //去除滚动效果
    @Override
    public void setCurrentItem(int item, boolean smoothScroll) {
        super.setCurrentItem(item, smoothScroll);
    }
    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item, false);
    }
 
    //禁止滚动
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (canloop) {//如果可以滚动,不消费事件,继续往下传事件
            return super.onInterceptTouchEvent(ev);
        } else {//如果不可以滚动,事件传给上级的onTouchEvent
            return false;
        }
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (canloop) {//如果可以滚动,不消费事件,往下传
           return super.onTouchEvent(ev);
        } else {//如果不可以滚动,事件传给上级的onTouchEvent
            return false;
        }
    }```

相关文章

网友评论

    本文标题:适用于作为tab的ViewPager,不能滚动并且没有滚动效果

    本文链接:https://www.haomeiwen.com/subject/eomlyttx.html