`

安卓事件分发机制总结

阅读更多

想学习自定义组件,先学习事件分发机制

看了很多事件分发机制博客,没有看源码,人家的东西总是懵懵懂懂,其实就是不懂。

感谢下面这两个链接的博主,讲解了view的事件分发(http://blog.csdn.net/guolin_blog/article/details/9097463),和viewgroup(http://blog.csdn.net/guolin_blog/article/details/9153747)的事件分发,本人才疏学浅,看了之后只非常明白view的分发机制,由于看过别人的多个viewgroup的分发,里面各种分发,截断,消费。所以不是很懂博主的viewgroup的分发,经过瞟了几行源码,觉得懂了,现在吧自己的总结帖下,错误之处,希望指正。

 

共性:点击都会调用dispatchTouchEvent

区别
一、view事件分发
dispatchTouchEvent,想看源码,如果设置了没有设置onteach监听器,就会直接调用ontachEvent方法
如果设置了onteach监听器onteach方法返回值为true,就不会调用onteachEvent,反之会调用
详情请看guolin博客

 

二、ViewGroup事件分发
ViewGroup 的dispatchTouchEvent中会调用onInterceptTouchEvent(是不是截断),

onInterceptTouchEvent如果返回false,不截断,就会遍历viewgroup的子view,找到那个子view被点击
然后调用该子view的dispatchTouchEvent方法,注意问题来了,子view也可能是viewgroup,那么就会再

次进行事件分发,原理一致
扯回来,如果截断,从源码入手
 if (mMotionTarget != null) { 
            mMotionTarget = null; 
        }
就是说mMotionTarget 肯定为null,在截断之后
final View target = mMotionTarget; 
    if (target == null) { 
        ev.setLocation(xf, yf); 
        if ((mPrivateFlags & CANCEL_NEXT_UP_EVENT) != 0) { 
            ev.setAction(MotionEvent.ACTION_CANCEL); 
            mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT; 
        } 
        return super.dispatchTouchEvent(ev); 
    }
因为mMotionTarget 肯定为nul肯定为null,所以截断之后一定会调用父类的dispatchTouchEvent
因为viewgroup的父类就是view,所以就回到了第一种情况,这个时候就会去调用view中的onteah方法
也就是设置的onteach监听器的方法,所以viewgroup设置onteach监听器也就能想通了。

1
0
分享到:
评论

相关推荐

    Android事件分发机制总结Demo

    Android事件分发总结Demo ,直观的体验事件分发原理,详情见博客:http://blog.csdn.net/u011916937

    Android事件分发机制的PPT总结

    关于事件分发的总结,出自国外一个讲解事件分发机制视频上的PPT,总结很到位,虽然是英文的,但是很容易理解。

    谈谈对Android View事件分发机制的理解

    然后google到了解决办法(重写Button,然后重写其中的ontouchEvent方法,且返回值为false),但是不知道原因,这两天看了几位大神的博客,然后自己总结下。 public class MyButton extends Button { private final ...

    Android View的事件分发机制简单理解

    View的事件分发机制1、前言2、基础2.1 MotionEvent类的基本用法。...滑动冲突的解决方法都是基于事件分发机制,本文我将对近期学到的事件分发机制内容进行理解和总结。 2、基础 要理解View的事件分发机制,先需

    Android View事件分发机制详解

    准备了一阵子,一直想写一篇事件分发的文章总结一下,这个知识点实在是太重要了。...先铺垫一些知识能更加清晰的理解事件分发机制: 1. 通过setContentView设置的View就是DecorView的子view,即DecorView是父容器

    Android事件分发与消费

    之前写过一篇Android事件分发机制详解,感觉比较乱,这里再总结一下。网上已经有很多前辈分析过源码,大家可以参考,我这里尽量不做过多的源码分析,仅仅从流程上分析。事件分发和消费我们主要涉及到以下三个方法:...

    android onTouchEvent处理机制总结(必看)

    下面小编就为大家带来一篇android onTouchEvent处理机制总结(必看)小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    【Android】事件分发机制源码解析

    源码分析2.1 Activity中的分发流程dispatchTouchEventonTouchEvent总结2.2 ViewGroup中的分发流程dispatchTouchEventonInterceptTouchEvent总结2.3 View中的分发流程dispatchTouchEventonTouchEventACTION_...

    Java最全面试题宝典.rar

    事件分发机制 ANR问题 Art和Dalvik的区别 Android关于OOM的解决方案 Fragment Activity&Fragment SurfaceView Android几种进程 APP启动过程 Activity启动流程以及界面展示过程 图片三级缓存 Bitmap的分析与使用 热...

    Android面试题大全

    该资源里面包括简历亮点总结,Java面试题及答案,Android面试题及答案,关于项目中会问到的问题与怎么讲解Android项目,人事面试资料,Android事件分发机制的回答,Android研发规范,大公司Android面试题,等等

    最全java面试题.zip

    事件分发机制 ANR问题 Art和Dalvik的区别 Android关于OOM的解决方案 Fragment Activity&Fragment SurfaceView Android几种进程 APP启动过程 Activity启动流程以及界面展示过程 图片三级缓存 Bitmap的分析与使用 热...

    自定义锁屏

    知识点: * 自定义View、View事件分发机制、接口通信 * 总结:http://blog.csdn.net/Vicent_9920/article/details/53308040

    KnowledgeSummary

    Android相关总结啥也不是JAVA相关知识点链接基础泛型注解反射并发序列化Json解析IO网络数据结构相关知识点链接HashMap阻塞队列JVM相关知识点链接JVMView相关知识点链接自定义View事件分发机制RecyclerView解析...

    Linux高性能服务器编程

    12.2.5 往事件多路分发器中注册事件 12.2.6 eventop结构体 12.2.7 event_base结构体 12.2.8 事件循环 第13章 多进程编程 13.1 fork系统调用 13.2 exec系列系统调用 13.3 处理僵尸进程 13.4 管道 13.5 信号...

Global site tag (gtag.js) - Google Analytics