• 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事件分发机制浅谈(一),android浅谈

Android事件分发机制浅谈(一),android浅谈

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

网友通过本文主要向大家介绍了android事件分发机制,android事件传递机制,android事件处理机制,android事件机制,android 事件分发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android事件分发机制浅谈(一),android浅谈


---恢复内容开始---

一、是什么

      我们首先要了解什么是事件分发,通俗的讲就是,当一个触摸事件发生的时候,从一个窗口到一个视图,再到一个视图,直至被消费的过程。

二、做什么

         在深入学习android的过程中,我们往往不知道为什么要去学习这些理论,它们枯燥,难懂,甚至在我们处于初级阶段进行开发时完全用不到这些理论。

     所以我们要学会一些技术,要知道它能做些什么。

         比较简单的,在做开发时,如何处理滑动冲突的问题。

三、事件分发机制的分析。

          首先在这里,这一节不过多的分析事件分发的源码了,在下一节分析,有兴趣的可以去看一看郭霖的博客,对源码分析讲的非常清楚,在这里我主要讲解一些我自己对它的理解。

          我们先在这里认识三个方法

          dispatchTouchEvent(MotionEvent ev) //用来进行事件的分发

          onInterceptTouchEvent(MotionEvent ev) //在dispatchTouchEvent()中调用,用来判断是否拦截某个事件

          onTouchEvent(MotionEvent ev)    //在dispatchTouchEvent()中调用,用来处理点击事件

          //伪代码分析,便于理解

          public boolean dispatchTouchEvent(MotionEvent ev){

                 boolean consume = false;

                 if(onInterceptTouchEvent(ev)){

                      consume = onTouchEvent(ev); 

                 } else{

                     consum = child.dispatchTouchEvent(ev);

                 }

      return consum;

          }

 

         首先我们将事件分发机制按两个主角分开讲,一个是ViewGroup,一个是View。

         对于ViewGroup而言

         当一个点击事件产生后,dispatchTouchEvent()方法调用。如果onInterceptTouchEvent()方法返回true表示事件被拦截,返回false则该事件会交给子View继续执行上述步骤,直至事件被处理。

         对于View而言

    处理事件,设置onTouchEventListener(),onTouch()回调,返回false,onTouchEvent()会被调用,若此时设置了setOnClickListener(),则onClick()方法会被调用。返回true,onTouchEvent()不会被调用,此时设置了setOnClickListener(),则onClick()方法并不会被调用。这便是View的分发机制

 

 

         简单来说上面两部分构成了事件分发机制,由于并没有分析源码,所以看起来很简单,画出流程图来说是这样的

        

         

       学习了这一节后,想必对android事件分发有了大致的了解,但可能还会有疑问,比如onClick方法为什么有时候设置了也不会被调用,等等问题,我会在接下来分析源码。

 

      补充:1、点击事件产生后,遵循如下顺序 Activity->Window->View

               2、当所有View都不处理事件时(onTouchEvent()返回false),事件会交还给Activity处理

      3、onTouch和onTouchEvent,都是在dispatchTouchEvent()中调用,onTouch优先于onTouchEvent执行。如果在onTouch方法中通过返回true将事件消费掉,onTouchEvent将不会再执行。另外需要注意的是,onTouch能够得到执行需要两个前提条件,第一mOnTouchListener的值不能为空,第二当前点击的控件必须是enable的。因此如果你有一个控件是非enable的,那么给它注册onTouch事件将永远得不到执行。对于这一类控件,如果我们想要监听它的touch事件,就必须通过在该控件中重写onTouchEvent方法来实现。

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

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

  • Android事件分发机制浅谈(一),android浅谈
  • Android开发2:事件处理及实现简单的对话框,android开发
  • Android面试题--事件处理,android试题--事件
  • Android中事件的分发机制
  • Android防止过快点击造成多次事件
  • Android事件分发
  • android的消息机制
  • Android_事件纷发
  • Android事件分发机制总结
  • Android基于监听的事件处理机制

相关文章

  • 2017-05-26Android 离线缓存的快速实现
  • 2017-05-26关于Android发送短信获取送达报告的问题,android发送短信
  • 2017-05-26Linux设备模型之input子系统详解
  • 2017-05-26Android之RecyclerView的原生Bug-Inconsistency detected. Invalid view holder adapter positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent},recyclerviewholder
  • 2017-05-26MTK处理器手机 解锁Bootloader 教程,mtkbootloader
  • 2017-05-26Picasso处理同一url,但资源变了的情况,picassourl
  • 2017-05-26安卓--selector简单使用,安卓--selector
  • 2017-05-26Android代码优化小技巧,android代码小技巧
  • 2017-05-26Android——Listview不用notifydatasetchanged更新数据的方法,androidlistview更新
  • 2017-05-26我的Android进阶之旅------)关于android:layout_weight属性的详细解析

文章分类

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

最近更新的内容

    • 常用的adb命令,常用adb命令
    • Android动态部署五:如何从插件apk中启动Service
    • Android Support 包知识,androidsupport
    • android Handler介绍,androidhandler介绍
    • Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset,nougatn7.1.2
    • DataPicker以及TimePicker显示时间和日期(屏幕上显示),datepicker日期格式
    • 自定义Dialog,android自定义dialog
    • android http同步请求,android同步请求
    • Android Studio Ndk 编程
    • Android和JavaScript相互调用的方法,androidjavascript

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

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