View的绘制、事件传递过程

View绘制过程

  1.   onMeasure()
  2.   onLayout()
  3.   onDraw()

过程详解

onMeasure()

  计算尺寸

onLayout()

  为viewGroup类型布局子视图用的。

onDraw()

  执行绘制图形动作。

View事件传递

Touch事件封装在MotionEvent对象中,其中包括touch的位置、时间、历史记录以及第几个手指触摸(多点触摸)等。

Touch事件分为:

  ACTION_DOWN,

  ACTION_UP,

  ACTION_MOVE,

  ACTION_POINTER_DOWN,

  ACTION_POINTER_UP,

  ACTION_CANCEL。

  (每个触摸事件都是以ACTION_UP开始,ACTION_DOWN结束)

事件处理包括:

  传递,dispatchTouchEvent()函数;

  拦截,onInterceptTouchEvent()函数;

  消费onTouchEvent()函数和onTouchListener。

传递过程:

  • 事件从Activity.dispatchTouchEvent()开始传递,从最上层的View(ViewGroup)开始一直往下传递。
  • 如果事件从上往下传递过程中被onInterceptTouchEvent做了拦截,那么将不会再次往下传递。
  • 如果在向下传递的过程中,一直没有被停止,最底层View也没有消费事件,事件会往上传传递,此时父View可以消费该Touch事件,如果一直没有被消费,会传递到Activity的onTouchEvent。
  • 如果View没有对ACTION_DOWN进行消费,之后的其他事件也不会传递过来。

  onTouchListener优先于onTouchEvent()对事件进行消费。

时间: 2024-11-02 15:30:28

View的绘制、事件传递过程的相关文章

事件的分发机制(View篇因此事件传递的顺序是先经过onTouch,再传递到onClick)

参考声明:感谢郭霖http://blog.csdn.net/guolin_blog/article/details/9097463和张鸿洋http://blog.csdn.net/lmj623565791/article/details/38960443 以一个简单的activity为例,该activity中只有一个button,如果我们为该按钮添加监听,只需要这样: 1 button.setOnClickListener(new OnClickListener() { 2 @Override

响应者链的事件传递过程

1.如果view的控制器存在,就传递给控制器:如果控制器不存在,则将其传递给它的父视图 2.在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理 3.如果window对象也不处理,则其将事件或消息传递给UIApplication对象 4.如果UIApplication也不能处理该事件或消息,则将其丢弃

Android webkit keyevent 事件传递过程

前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent 事件开始是从/frameworks/base/core/java/android/webkit目录下WebViewClassic.java 中的onKeyDown() 函数开始的 // Bubble up the key event if          // 1. it is a system

Android View 触摸事件传递机制

PS:以现在的眼光看以前写的博客感觉写的很烂,或许或一段时间再看现在的博客会有同样的感觉.所以每时每刻都去学习,去发现和理解新的东西. 引言 由于之前写的一篇关于Android事件传递顺序的博客质量太差,可能是理解不到位的原因,故最近又花了许多时间再次去看Android源码,看完之后有了新的理解,所以打算重新整理这篇博客.理解Android触摸事件传递机制有助于日后的开发以及自定义一些手势效果等.注意:这篇博客是基于Android2.0源码来分析的,不管老版本还是新版本的Android,其内部触

IOS事件传递及响应过程

IOS事件传递及响应过程 –>事件到来 –>事件分发 –>事件响应 事件(Events) 1.触摸事件(Touch Events)(单点触摸.多点触摸及各种手势) 2.晃动事件(Motion Events) (重力.加速度等传感器) 3.远程控制事件(Remote-Control Events) (线控耳机.airplay) 事件分发(Event Delivery) 触摸事件:触摸->硬件中断->UIKit封装成UIEvent对象(针对触摸事件)-> 当前运行的应用程序

ios之事件的传递过程总结

1 一.事件的传递过程 2 1.用户点击屏幕,产生一个UIEvent(触摸事件)对象 3 2.UIApplication最先接收到这个事件,并且把这个事件添加到一个事件队列中 4 3.UIApplication会将事件队列中的所有事件按顺序取出来进行传递和处理 5 4.UIApplication首先会将事件对象传递给app的主窗口 6 5.由主窗口找出最合适的UIView来处理这个事件 7 1> UIApplication -> UIWindow -> controller.view 8

事件传递之一(基本概念)

Android事件传递机制之一 所谓事件传递是指在Android应用程序开发中,当有多个View叠加在同一个区域内,如果按下View所在的区域,按下的Down.Move,Up事件将如何进行传递的过程. 假设一个ViewGroup里面包含了一个View,当用户按下View时,ViewGroup和View有哪些方法会触发呢. 在了了解这些事件传递之前,我们先来了解一下几个方法的概念: 1. dispatchTouchEvent:此方法只有继承ViewGroup的类才有,是指向childView分发事

Android Touch事件传递机制详解 上

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/37961997 最近总是遇到关于Android Touch事件的问题,如:滑动冲突的问题,以前也花时间学习过Android Touch事件的传递机制,可以每次用起来的时候总是忘记了,索性自己总结一下写篇文章避免以后忘记了,其实网上关于Touch事件的传递的文章真的很多,但是很少有系统性的,都是写了一个简单的demo运行了一下,对于我们了解Android Touch事件基本上没有任何帮助. 今

android事件传递机制详解

本篇内容将结合Android源码来分析Android的事件传递机制.众所周知,点按.滑动.触摸构成了Android等智能设备的基本操作,几乎所有的应用都通过对触摸屏的操作来进行应用程序的使用.那么,在Android中,触摸事件是如何响应及传递的呢,通过本篇内容你将有一个初步的了解. 实验环境 OS X 10.9 Eclipse(ADT) Android源码版本:API Level 19(Android 4.4) Android事件构成 在Android中,事件主要包括点按.长按.拖拽.滑动等,点