android 触摸事件传递机制与笔记
一、笔记链接
1. android 触摸事件传递机制
Android:30分钟弄明白Touch事件分发机制 https://www.cnblogs.com/linjzong/p/4191891.html
2. android OnTouchListener,onTouchEvent,onClickListener执行顺序
http://blog.csdn.net/xw13782513621/article/details/76648557
二、简记
1. android 触摸事件传递机制
1.1Touch事件分发中只有两个主角:ViewGroup和View。ViewGroup包含onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent三个相关事件。View包含dispatchTouchEvent、onTouchEvent两个相关事件。其中ViewGroup又继承于View。
1.2.ViewGroup和View组成了一个树状结构,根节点为Activity内部包含的一个ViwGroup。
1.3.触摸事件由Action_Down、Action_Move、Aciton_UP组成,其中一次完整的触摸事件中,Down和Up都只有一个,Move有若干个,可以为0个。
1.4.当Acitivty接收到Touch事件时,将遍历子View进行Down事件的分发。ViewGroup的遍历可以看成是递归的。分发的目的是为了找到真正要处理本次完整触摸事件的View,这个View会在onTouchuEvent结果返回true。
1.5.当某个子View返回true时,会中止Down事件的分发,同时在ViewGroup中记录该子View。接下去的Move和Up事件将由该子View直接进行处理。
/** * ViewGroup * @param ev * @return */ public boolean dispatchTouchEvent(MotionEvent ev){ ....//其他处理,在此不管 View[] views=getChildView(); for(int i=0;i
要特别注意FrameLayout中子view的触摸事件传递:默认情况下(即不消费触摸事件),重叠的多个view都会接收到触摸事件 FrameLayout 实例1(评论是重点), 实例2
2. android OnTouchListener,onTouchEvent,onClickListener执行顺序
首先执行OnTouchListener,之后为onTouchEvent,最后才执行onClickListener内的方法
public boolean dispatchTouchEvent(MotionEvent event) { ...... ListenerInfo li = mListenerInfo; if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && li.mOnTouchListener.onTouch(this, event)) { result = true; } if (!result && onTouchEvent(event)) { result = true; } ...... return result; }
public boolean onTouchEvent(MotionEvent event) { ...... switch (action) { case MotionEvent.ACTION_UP: ...... performClick(); ...... break; ...... }public boolean performClick() { final boolean result; final ListenerInfo li = mListenerInfo; if (li != null && li.mOnClickListener != null) { playSoundEffect(SoundEffectConstants.CLICK); li.mOnClickListener.onClick(this); result = true; } else { result = false; } sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); return result; }
更多相关文章
- android 百度地图定位与覆盖物的添加,以及他们的点击事件
- android的窗口机制分析------事件处理
- Android Touch事件传递机制
- Android 虚拟机及其GC机制
- Android的Touch事件处理机制
- Android中设计具有背景图的按钮—ImageButton的焦点及事件处理
- Android Layout机制研究
- android 将鼠标右键点击事件改为点击后返回功能