Android开发——View滑动冲突解决方案
0. 前言
我们在Android开发——事件分发机制详解中深入学习了事件分发机制,为我们解决Android开发中的滑动冲突问题做了初步准备。针对滑动冲突这里给出两种解决方案:外部拦截法和内部拦截法。
转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52600422
1.外部拦截法
外部拦截法是指事件都先经过父控件的拦截处理,这里需要注意的是ACTION_DOWN事件父控件中必须返回false,因为如果父控件拦截了DOWN,后续事件也会交给它处理,子控件就无法拿到事件了,具体原因已经在前言中的链接文中介绍过了。接着就是MOVE事件,如果父控件需要此拦截事件,就拦截,不需要就不拦截。最后在UP事件中也默认返回false。
外部拦截法不需要改写子控件,只需要改写父控件的onInterceptTouchEvent方法,代码如下:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean intercepted=false;
switch (action) {
case MotionEvent.ACTION_MOVE:
intercepted=false;
break;
case MotionEvent.ACTION_MOVE:{
if(父控件需要处理此事件){
intercepted=true;}
else{
intercepted=false;}
break;
}
case MotionEvent.ACTION_UP: {
intercepted=false;
break;
}
//...
return intercepted;
}
2.内部拦截法
内部拦截法是指父控件设置为不拦截除ACTION_DOWN以外的任何事件,当DOWN传递给子元素时,通过设置getParent().requestDisallowInterceptTouchEvent(false)使父控件不拦截任何事件,此时所有事件都传递给子元素,如果子元素需要此事件就直接消耗掉,否则可在ACTION_MOVE中通过设置getParent().requestDisallowInterceptTouchEvent(true)使父控件去拦截MOVE以及UP事件并由自己消耗该事件。
我们需要修改子元素的dispatchTouchEvent方法:
public boolean dispatchTouchEvent(MotionEventevent) {
switch (action) {
case MotionEvent.ACTION_DOWN:{
//使父控件不拦截DOWN以外的一系列事件
getParent().requestDisallowInterceptTouchEvent(true);
break;}
case MotionEvent.ACTION_MOVE:{
if(父控件需要处理此事件){
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
}
case MotionEvent.ACTION_UP: {
break;
}
...
return super.dispatchTouchEvent(event);
}
当然,还需要修改父容器的onInterceptTouchEvent()方法,使其默认拦截除DOWN以外的事件,代码如下:
@Override
publicboolean onInterceptTouchEvent(MotionEvent ev) {
intaction=ev.getAction();
if(action==MotionEvent.ACTION_DOWN){
return false;
}else {
return true;
}
}
以上就是两种解决滑动冲突的解决方案,在其中的条件判断代码里加入自己的业务逻辑判断即可。
转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52600422。
Android开发——View滑动冲突解决方案的更多相关文章
- Android开发——View滑动的三种实现方式
0. 前言 Android开发中,我们常常需要View滑动实现一些绚丽的效果来优化用户体验.一般View的滑动可以用三种方式实现. 转载请注明出处:http://blog.csdn.net/seu ...
- android 开发 View _1_ View的子类们 和 视图坐标系图
目录: android 开发 View _2_ View的属性动画ObjectAnimator ,动画效果一览 android 开发 View _3_ View的属性动画ValueAnimator a ...
- Android View的事件分发机制和滑动冲突解决方案
这篇文章会先讲Android中View的事件分发机制,然后再介绍Android滑动冲突的形成原因并给出解决方案.因水平有限,讲的不会太过深入,只希望各位看了之后对事件分发机制的流程有个大概的概念,并且 ...
- 【朝花夕拾】Android自定义View篇之(七)Android事件分发机制(下)滑动冲突解决方案总结
前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/11072989.html],谢谢! 前面两篇文章,花了很大篇幅讲解了Android的事件分发机制 ...
- view的滑动冲突解决方案
一.常见的滑动冲突场景 1.外部滑动方向和内部滑动方向不一致 2.外部滑动方向和内部滑动方向一致 3.上面两种情况的嵌套 二.滑动冲突处理的原则 场景1的处理原则是:当用户左右滑动时,需要让外部的vi ...
- 浅谈Android View滑动冲突
引言 上一篇文章我们从源码的角度介绍了View事件分发机制,这一篇文章我们就通过介绍滑动冲突的规则和一个实例来更加深入的学习View的事件分发机制. 1.外部滑动方向和内部滑动方向不一致 考虑这样一种 ...
- [Android UI]View滑动方式总结
一.前言 在上一篇文章,介绍了View的坐标等基础知识,有了基础知识后,对下面内容的理解也将会容易很多.那么本文介绍的是View滑动的几种方式,这对于View来说,也是需要重要掌握的内容,因为用户无时 ...
- android 开发 View _14 MotionEvent和事件处理详解,与实践自定义滑动条View
转载https://blog.csdn.net/huaxun66/article/details/52352469 MotionEvent MotionEvent对象是与用户触摸相关的时间序列,该序列 ...
- android 表情,软键盘冲突解决方案(仿微博等SNS应用)
之前总想搞一下这个模块,可是由于忙碌总是推迟,现在就把这块好好的弥补过来,下面是我实现的思路.本人才疏学浅,还望大家不要见笑. 首先我们还是先看写示例: 上面应用应该不用我过多介 ...
随机推荐
- java中将数组、对象、Map、List转换成JSON数据
如果要将数组.对象.Map.List转换成JSON数据,那我们需要一些jar包: json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar commons-logging.ja ...
- IDEA 打包jar
1.ctrl+shift+alt+s 弹出项目设置窗口,点击Artifacts页签,点+号,选择jar Empty.修改jar name,将右侧需要打包进去的资源拖到左侧,记住Output direc ...
- vos设置可呼出手机或固话
问题: 默认公司只让呼出手机号码,但有的客户要求能打固话,怎么办? 落地网关——补充设置——落地前缀——落地被叫改写规则 在改写规则里添加固话号段即可 具体案例: 5201——1表示让520号段只能拨 ...
- nginx处理HTTP header问题
在实际开发中遇到http header 自定义key中包含下划线(_)时服务端header丢失的问题,解决办法详细见以下网页内容,感谢原博主 http://blog.csdn.net/dac55300 ...
- rosservice call ERROR:Unable to load type ... Have you typed 'make'
you need to source in the new terminal $ source ~/catkin_ws/devel/setup.bash
- Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.错误
错误如图示: 1.在php的目录下建立个文件夹tmp,这个有权限的问题,如果是ntfs的分区,就一定要添加evryone的控制权限,否则是没用的.2.在php.ini找到session.save_pa ...
- Xcode 自定义控件创建及触发事件
#pragma mark 控制器的view加载完毕的时候调用 //一般在这里进行界面的初始化 - (void)viewDidLoad { [super viewDidLoad]; NSLog(@&qu ...
- openwrt定制管理
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianguozheng/article/details/24673097 近期这个比較火,可是改了东 ...
- DP,得到最多苹果,(POJ2385)
题目链接:http://poj.org/problem?id=2385 题意: 牛在两棵苹果树下收集苹果,牛只能在这两棵树之间走动w次,在t时刻,某棵树会掉下苹果. 解题报告: ///dp[t][w] ...
- HDU(1754),线段树,单点替换,区间最值
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...