• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android中View的事件分发机制——Android开发艺术探索笔记

Android中View的事件分发机制——Android开发艺术探索笔记

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android recyclerview,android scrollview,android surfaceview,android photoview,android wheelview等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android中View的事件分发机制——Android开发艺术探索笔记


介绍

点击事件的事件分发就是对MotionEvent事件的分发过程,当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发的过程。

涉及到的三个方法

dispatchTouchEvent:用来进行事件的分发,如果事件能够传递给当前View,那么此方法一定会被调用,返回结果受当前View的onTouchEvent和View的dispatchTouchEvent方法的影响,表示是否当消耗当前事件 onInterceptTouchEvent:用来判断是否拦截某个事件,如果当前View拦截了某个事件,那么在同一个事件序列当中,此方法不会被再次调用,返回结果表示是否拦截当前事件; onTouchEvent:在dispatchTouchEvent方法中调用,用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前View无法再次接收到事件。

三个方法之间的关系

public boolean dispatchTouchEvent(MotionEvent ev) { 
    boolean consume = false;
    if(onInterceptTouchEvent(ev)) { 
        consume = onTouchEvent(ev);
    } else { 
        consume = child.dispatchTouchEvent(ev); 
    }
    return consume; 
}

上面的伪代码很好的描述了三者之间的关系。如果当前View拦截事件,就交给自己的onTouchEvent去处理,否则就传给子View,直到事件被最终处理。

事件分发顺序

当一个点击事件产生后,它的传递过程如下:Activity -> Window -> View。如果View的onTouchEvent返回false,那么它的父容器onTouchEvent将会被调用,以此类推,最终将由Activity的onTouchEvent处理。

Activity对事件的分发过程

Activity -> Window -> DecorView。

Windows是一个抽象类,可以控制顶级View的外观和行为策略,PhoneWindow是这个类的唯一个实现。
DecorView就是当前界面的底层容器,即setContentView所设置的View是它的一个子View。

顶级View对点击事件的分发过程

ViewGroup -> dispatchTouchEvent -> onInterceptTouchEvent -> onTouch or onTouchEvent

顶级View一般都是一个ViewGroup。拦截事件之后,如果ViewGroup设置了mOnTouchListener,则Listener里的onTouch方法会屏蔽掉onTouchEvent。如果onTouchEvent设置了mOnClickListener,则Listener里的onClick会被调用。如果ViewGroup没有拦截则传给子View直到整个事件分发完成。

View对点击事件的处理过程

如果View设置了mOnTouchListener,则Listener里的onTouch方法会屏蔽掉onTouchEvent。如果onTouchEvent设置了mOnClickListener,则Listener里的onClick会被调用。
View没有onInterceptTouchEvent方法,一旦有点击事件传递给他,他就会处理。

注:上面只是描述了事件分发过程的原理,关于源码的分析请参考书本的相应章节。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 在Kotlin编写RecyclerView适配器(KAD 16),kotlinrecyclerview
  • 深入理解 Android 之 View 的绘制流程,androidview
  • RecyclerView在软键盘弹出时自动调整内容技巧,recyclerview技巧
  • RecyclerView的五大开源项目-解决办法
  • Android View分区域点击实现方案——1.根据坐标范围
  • 【读书笔记】【Android 开发艺术探索】第3章 View 的事件体系
  • Android View体系(六)从源码解析Activity的构成
  • RecyclerView再封装,RecyclerView封装
  • Android中View的滑动冲突——Android开发艺术探索笔记
  • Android View体系(二)实现View滑动的六种方法

相关文章

  • 2017-05-26Android开发:自动开关机实现教程
  • 2017-05-26Android--根据子控件的大小自动换行的ViewGroup,android--viewgroup
  • 2017-05-26Android中使用findViewByMe提升组件查找效率,光伏组件转换效率
  • 2017-05-26React-Native系列Android——Native与Javascript通信原理(二)
  • 2017-05-26Android特效专辑(九)——仿微信雷达搜索好友特效,逻辑清晰实现简单
  • 2017-05-26retrofit2中ssl的Trust anchor for certification path not found问题,retrofit2anchor
  • 2017-05-26开发 Material Design+RxJava+Retrofit+MVP App 参考资料,rxjavaretrofit
  • 2017-05-26Android开发1:基本UI界面设计——布局和组件,androidui
  • 2017-05-26安卓界面组件----列表视图,安卓组件----视图
  • 2017-05-26Android事件分发

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android线程管理(三)——Thread类的内部原理、休眠及唤醒,androidthread
    • android历史
    • Android 离线缓存的快速实现
    • Android网络编程(一)HTTP协议原理
    • Android EditText只有下面有一条横线问题
    • 统计Git版本库每个人提交次数和代码的增加和删除行数脚本
    • Android一个ListView列表之中插入两种不同的数据,androidlistview
    • android:descendantFocusability用法,
    • App内切换语言,app切换语言
    • Android中使用Notification实现进度通知栏(示例三),notification进度条

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有