viewpager跟HorizontalScrollView,listview冲突的问题
来源:互联网 发布:淘宝小叶紫檀真假 编辑:程序博客网 时间:2024/05/16 00:55
这几天做到一个小qpp,发现一个严重的问题,因为主要布局是一个HorizontalScrollView里面装了个viewpager包含fragment,恰好我有又想实现一个侧边栏,所以发现app运行之后,侧滑栏虽然能够滑动,但是viewpager完全不能用了,不能滑动,就连tablelayout按钮都不能用了,就上网查询了下资料,原来是viewpager和HorizontalScrollView冲突了,HorizontalScrollView里面viewpager的活动被HorizontalScrollView父view拦截了,所以我们为了能够实现两者的协调,必须分情况到底父view是否该拦截子view的活动。拦截了侧滑栏就能活动,不拦截viewpager就能活动。
getParent().requestDisallowInterceptTouchEvent(true);把touch主动权交给子view处理,不拦截touch事件,也就是viewpagergetParent().requestDisallowInterceptTouchEvent(flse);把touch主动权交给父view处理,拦截touch事件,也就是HorizontalScrollView具体代码如下:package com.example.a1.myapplication.View;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;public class ChildViewPager extends ViewPager { public ChildViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public ChildViewPager(Context context) { super(context); } // 滑动距离及坐标 归还父控件焦点 private float xDistance, yDistance, xLast, yLast,xDown, mLeft; @Override public boolean dispatchTouchEvent(MotionEvent ev) { //把touch主动权交给子view处理,不拦截touch事件,也就是viewpager getParent().requestDisallowInterceptTouchEvent(true); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; xLast = ev.getX(); yLast = ev.getY(); xDown = ev.getX(); mLeft = ev.getX(); // 解决与侧边栏滑动冲突 break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); final float curY = ev.getY(); xDistance += Math.abs(curX - xLast); yDistance += Math.abs(curY - yLast); xLast = curX; yLast = curY; if (mLeft < 100 || xDistance < yDistance) { getParent().requestDisallowInterceptTouchEvent(false); } else { if (getCurrentItem() == 0) { if (curX < xDown) { getParent().requestDisallowInterceptTouchEvent(true); } else { getParent().requestDisallowInterceptTouchEvent(false); } } else if (getCurrentItem() == (getAdapter().getCount()-1)) { if (curX > xDown) { getParent().requestDisallowInterceptTouchEvent(true); } else { getParent().requestDisallowInterceptTouchEvent(false); } } else { getParent().requestDisallowInterceptTouchEvent(true); } } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: break; } return super.dispatchTouchEvent(ev); }}在今后使用中只需要使用上述代码然后在layout布局文件中使用<com.hk.View.ChildViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="wrap_content" > </com.hk.ChildViewPager>
然后就ok了,而且你觉得想实现侧滑栏实现的简单点,可以删除一些上面代码的东东西,当然listview也是同样的道理,相信大神的你们都会领悟。
阅读全文
1 0
- viewpager跟HorizontalScrollView,listview冲突的问题
- 完美解决viewpager跟其他类型的listview 或 gridview一起使用时,滑动冲突问题
- 解决 HorizontalScrollView 和 ViewPager 的滑动冲突
- HorizontalScrollView中viewpager冲突
- HorizontalScrollView滑动冲突的问题
- 自定义viewpager解决listview和viewpager滑动冲突的问题
- ListView +HorizontalScrollView OnItem 冲突
- 解决ViewPager里面包含一个HorizontalScrollVIew触摸冲突问题
- 解决ViewPager与HorizontalScrollView 冲突
- android tab(自定义继承HorizontalScrollView)与水平滑动的ListView的滑动冲突问题
- 解决ListView+ViewPager滑动事件冲突的问题
- 解决ListView+ViewPager滑动事件冲突的问题
- 安卓解决viewPager+scrollView+listView滑动冲突的问题
- 如何解决listView或scrollView+viewpager手势冲突的问题
- ViewPager与ListView纵向滑动冲突的问题
- HorizontalScrollView 中嵌套 viewpager滑动冲突的解决
- ListView和HorizontalScrollView焦点冲突
- listview嵌套viewpager 滑动冲突问题
- C#调用WebService实例和开发
- 数组指针和指针数组
- centos 6.8 + make + pgql9.6
- Python学习手册(第三部分)
- 二叉树的各个考点
- viewpager跟HorizontalScrollView,listview冲突的问题
- Webrtc delay-base-bwe代码分析(6): 整体分析
- html块状元素、内联元素
- solr安装与配置
- [深度学习] DNN中防止过拟合的方法
- 队列(链式)
- Vue2.3.0源码笔记(未完)
- Opencv图像的读取
- pom.xml中maven-compiler-plugin报错