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滑动冲突解决方案的更多相关文章

  1. Android开发——View滑动的三种实现方式

    0. 前言   Android开发中,我们常常需要View滑动实现一些绚丽的效果来优化用户体验.一般View的滑动可以用三种方式实现. 转载请注明出处:http://blog.csdn.net/seu ...

  2. android 开发 View _1_ View的子类们 和 视图坐标系图

    目录: android 开发 View _2_ View的属性动画ObjectAnimator ,动画效果一览 android 开发 View _3_ View的属性动画ValueAnimator a ...

  3. Android View的事件分发机制和滑动冲突解决方案

    这篇文章会先讲Android中View的事件分发机制,然后再介绍Android滑动冲突的形成原因并给出解决方案.因水平有限,讲的不会太过深入,只希望各位看了之后对事件分发机制的流程有个大概的概念,并且 ...

  4. 【朝花夕拾】Android自定义View篇之(七)Android事件分发机制(下)滑动冲突解决方案总结

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/11072989.html],谢谢! 前面两篇文章,花了很大篇幅讲解了Android的事件分发机制 ...

  5. view的滑动冲突解决方案

    一.常见的滑动冲突场景 1.外部滑动方向和内部滑动方向不一致 2.外部滑动方向和内部滑动方向一致 3.上面两种情况的嵌套 二.滑动冲突处理的原则 场景1的处理原则是:当用户左右滑动时,需要让外部的vi ...

  6. 浅谈Android View滑动冲突

    引言 上一篇文章我们从源码的角度介绍了View事件分发机制,这一篇文章我们就通过介绍滑动冲突的规则和一个实例来更加深入的学习View的事件分发机制. 1.外部滑动方向和内部滑动方向不一致 考虑这样一种 ...

  7. [Android UI]View滑动方式总结

    一.前言 在上一篇文章,介绍了View的坐标等基础知识,有了基础知识后,对下面内容的理解也将会容易很多.那么本文介绍的是View滑动的几种方式,这对于View来说,也是需要重要掌握的内容,因为用户无时 ...

  8. android 开发 View _14 MotionEvent和事件处理详解,与实践自定义滑动条View

    转载https://blog.csdn.net/huaxun66/article/details/52352469 MotionEvent MotionEvent对象是与用户触摸相关的时间序列,该序列 ...

  9. android 表情,软键盘冲突解决方案(仿微博等SNS应用)

    之前总想搞一下这个模块,可是由于忙碌总是推迟,现在就把这块好好的弥补过来,下面是我实现的思路.本人才疏学浅,还望大家不要见笑. 首先我们还是先看写示例:            上面应用应该不用我过多介 ...

随机推荐

  1. MyBatis中sql语句

    一.select <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String&qu ...

  2. vsftpd配置

    yum -y install vsftpd useradd upload -s /sbin/nologin passwd upload mkdir /data/upload chown -R upol ...

  3. attachEvent方法的作用

    用于HTML内代码层和UI层分离.比如,你要给一个按钮增加一个单击事件,你会怎么做?<input type="button" id="theBtn" va ...

  4. 解决在php5中simple XML解析错误的问题

    2004年7月,php5正式版本的发布,标志着一个全新的PHP时代的到来.PHP5的最大特点是引入了面向对象的全部机制,并且保留了向下的兼容性.程序员不必再编写缺乏功能性的类,并且能够以多种方法实现类 ...

  5. Django基础--3

    ORM django一对多的操作 获取表单的三种方式:views 获取对象            .all()      html中获取方式为 row.id,row,host 获取字典         ...

  6. 【微软大法好】VS Tools for AI全攻略(4)——选择适合自己的虚拟机

    当我们选择好了自己的虚拟机后,也许效果不尽如人意.就比如我,发现代码在训练一段时间之后,CPU的使用率会下降. 这个时候我们就要开始考虑,是不是我们选择的虚拟机不是适合自己的型号. Azure的虚拟机 ...

  7. server 2008 64位安装Rational错误

    Administrator has detected that this is a terminal server session.Administrator does not support run ...

  8. ELF文件格式与进程地址空间的联系

    http://blog.csdn.net/q_l_s/article/details/52597330 三.分析在fork产生新进程中ELF文件格式与进程地址空间的联系 1.进程的虚拟地址空间 每个程 ...

  9. 【转】jpg png区别和使用

    为什么想整理这方面的类容,我觉得就像油画家要了解他的颜料和画布.雕塑家要了解他的石材一样,作为网页设计师也应该对图片格式的特性有一定了解,这样才能更好的表达你的创意和想法. 除此之外,我们在平时工作中 ...

  10. 多线程, Thread类,Runnable接口

    多线程 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 单线程程序:即,若有多个任务只能依次执 ...