ViewPager禁止滑动,设置页片间距,设置当前显示的页面,缓存个数,以及解决嵌套ViewPager左右滑动冲突问题
2017-04-01 14:02
961 查看
使用一个类继承ViewPager,重写onTouchEvent,dispatchTouchEvent方法,皆返回false,禁止滑动
设置页片间距
设置当前显示的页面
设置缓存个数mViewPager.setOffscreenPageLimit(3)`;//默认为1,左右各缓存一个
2,因嵌套ViewPager左右滑动问题,可以通过dispatchTouchEvent的方法判断是否是左右滑动,再通过getParent().requestDisallowInterceptTouchEvent请求父容器
@Override public boolean onTouchEvent(MotionEvent ev) { return false;//去掉父类处理事件能力,自己不消费 } @Override public boolean dispatchTouchEvent(MotionEvent ev) { return false;//返回false禁止父类分发事件 }
设置页片间距
mViewPager.setPageMargin(45);//其中数字为像素
设置当前显示的页面
mViewPager.setCurrentItem(1);//默认索引0开始既是第一个
设置缓存个数mViewPager.setOffscreenPageLimit(3)`;//默认为1,左右各缓存一个
2,因嵌套ViewPager左右滑动问题,可以通过dispatchTouchEvent的方法判断是否是左右滑动,再通过getParent().requestDisallowInterceptTouchEvent请求父容器
public class ChildViewPager extends ViewPager { private int downX; private int downY; public ChildViewPager(Context context) { super(context); } public ChildViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { int action = ev.getAction(); if (action==MotionEvent.ACTION_DOWN){ downX = (int) ev.getX(); downY = (int) ev.getY(); getParent().requestDisallowInterceptTouchEvent( true); }else if (action==MotionEvent.ACTION_MOVE){ int moveX = (int) ev.getX(); int moveY = (int) ev.getY(); int dx = moveX - downX; int dY = moveY - downY; //通过计算滑动的绝对值判断上下还是左右滑动 上下滑动 由父容器处理 if (Math.abs(dx)<Math.abs(dY)){ getParent().requestDisallowInterceptTouchEvent(false); }else { //第一页并且手指是从右向左滑动不处理事件 if (getCurrentItem()==0 &&dx>0){ getParent().requestDisallowInterceptTouchEvent(false); }else if (getCurrentItem()==getAdapter().getCount()-1 &&dx<0){ //最后一页并且手指是从左向右滑动不处理事件 getParent().requestDisallowInterceptTouchEvent(false); }else { getParent().requestDisallowInterceptTouchEvent(true); } } } return super.dispatchTouchEvent(ev); } }
相关文章推荐
- ScrollView中嵌套的viewPager,viepager高度设置为wrap_content时内容不显示问题以及与scrollview冲突的解决方案
- 解决ListView嵌套在ScrollerView中显示不全以及滑动冲突的问题
- android listview嵌套viewpager,viewpager嵌套gridview,解决内嵌无法显示以及时间冲突的问题
- 关于ViewPager被嵌套在ScrollView中不显示以及滑动冲突的问题
- 完美解决Android里面scrollview嵌套及listview嵌套viewpager的滑动冲突问题的简单方法
- Android中SwipeRefreshLayout和ViewPager左右滑动冲突的原因以及正确的解决方法
- 解决ScrollView嵌套viewpager滑动事件冲突问题
- React Native通过修改ScrollableTabView和ViewPager来解决左右滑动冲突的问题
- Android嵌套滑动控件的冲突解决和ViewPager适配当前子控件高度不留空白的办法
- 简单完美解决PullToRefreshLayout中PullableListView嵌套ViewPager时滑动冲突的问题
- android 布局 使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
- Android ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题解决方案
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
- ViewPager禁止滑动以及它与内层滑动控件水平方向上事件冲突的解决方法
- 完美解决DrawerLayout全屏滑动及嵌套viewpager滑动冲突问题
- Android 当可缩放的View用ViewPager显示时 左右滑动冲突问题
- Android嵌套滑动控件的冲突解决和ViewPager适配当前子控件高度不留空白的办法
- Android ViewPager禁止左右滑动以及点击选项卡切换闪烁的问题
- 解决ViewPager嵌套ViewPager滑动冲突问题