首页 > 代码库 > andorid自定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager
andorid自定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager
最近的项目中,有一个需求要用ViewPager中嵌套ViewPager去实现整个效果,没做任何处理做出来后,只能不停的滑动子ViewPager,父ViewPager就无法滑动了,这样肯定是不满足的,分析了一下原因,很显示是整个滑动事件都被子ViewPager消耗掉了,所以只能对ViewPager做一下自定义处理,才可以实现。以下是这个需求实现后的效果图:
从图上就可以看出:我们用ViewPager中嵌套了ViewPager,而且要实现的是子ViewPager滑动到最后一页时,再滑就是滑动父ViewPager.下面将自定义的ViewPager代码贴出来,大家可以参考下。
/********************************************************** * @文件名称:MyViewPager.java * @创建时间:2014年11月18日 下午4:24:25 * @修改历史:2014年11月18日创建初始版本 **********************************************************/ public class MyViewPager extends ViewPager { //父ViewPager的引用 private ViewPager viewPager; private boolean flag = true; private float mLastMotionX; public BookstoreViewPager(Context context) { super(context); } public BookstoreViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public ViewPager getViewPager() { return viewPager; } //处理前必须调用此方法初始化冲突ViewPager public void setViewPager(ViewPager viewPager) { this.viewPager = viewPager; } @Override public boolean dispatchTouchEvent(MotionEvent ev) { final float x = ev.getX(); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // 使父控件不处理任何触摸事件 viewPager.requestDisallowInterceptTouchEvent(true); flag = true; mLastMotionX = x; break; case MotionEvent.ACTION_MOVE: if (flag) { if (x - mLastMotionX > 5 && getCurrentItem() == 0) { flag = false; viewPager.requestDisallowInterceptTouchEvent(false); //将事件交由父控件处理 } if (x - mLastMotionX < -5 && getCurrentItem() == getAdapter().getCount() - 1) { flag = false; viewPager.requestDisallowInterceptTouchEvent(false); } } break; case MotionEvent.ACTION_UP: viewPager.requestDisallowInterceptTouchEvent(false); break; case MotionEvent.ACTION_CANCEL: viewPager.requestDisallowInterceptTouchEvent(false); break; } return super.dispatchTouchEvent(ev); } }
andorid自定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。