当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?
2024-10-18 17:19:15
有时我们需要将ViewPager嵌套在其他已经含有手势动作的ViewGroup里,如ScrollView,ListView时,会造成手势冲突,如表现为ViewPager向左划时,不小心向上移动了一点距离,ViewPager立刻回弹到原始位置。
主要问题出在ScrollView/ListView作为ViewPager的ParentView,会先接受到触摸信息,而且他们对上下滑动是会做出拦截动作,并接管触摸信息的向下传递,导致ViewPager滑动异常。 先看一种解决方式:
public class ScrollViewExtend extends ScrollView {
private float xDistance, yDistance, xLast, yLast;
public ScrollViewExtend(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
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(xDistance > yDistance){
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
}
这种方式的确可以解决这个问题,但是其实Google已经提供了一个函数来解决ParentView与ChildView手势冲突的问题。
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept)
由ViewPager在OnTouch/onInterceptTouchEvent,dispatchTouchEvent中调用即可
最新文章
- ubuntu中查看已有的mysql用户并修改用户名和密码
- vector迭代器用法
- solr4.5安装配置 linux+tomcat6.0+mmseg4j-1.9.1分词
- JVM系列-分代收集垃圾回收
- ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
- css权值计算
- [New Portal]Windows Azure Virtual Machine (17) Virtual Machine成本分析
- leetcode 215. Kth Largest Element in an Array
- paper 47 :Latex中文显示(转)
- Swift - 单例模式的实现
- js 里面 写 C# 代码 遇到的问题
- 程序一 用记事本建立文件src.dat,其中存放若干字符。编写程序,从文件src.dat中读取数据,统计其中的大写字母、小写字母、数字、其它字符的个数,并将这些数据写入到文件test.dat中。
- 用keytool制作证书并在tomcat配置https服务(二 )
- leetcode8:字符串转整数 (atoi)
- web scraper——安装【一】
- 使用IntelliJ IDEA 配置Maven(转)
- Spring Boot中的AutoConfiguation核心注解
- 老毛桃pe装机工具备份系统
- [py]python中__new__作用
- 一张图看懂高通QC1.0-QC4.0快充进化之路!QC2.0跟QC3.0充电区别