`

安卓事件分发机制总结

阅读更多

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

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

感谢下面这两个链接的博主,讲解了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”,结合代码实例MyTouchEventDemo,帮助开发者清晰理解这一核心概念。 事件分发机制主要涉及三个关键组件:View、ViewGroup(布局)和MotionEvent。当用户触摸屏幕时...

    Android 事件分发机制视频讲解

    ### Android 事件分发机制详解 #### 一、引言 在Android开发中,事件处理是用户界面交互设计的核心组成部分。对于开发者来说,理解事件如何被分发到各个控件中至关重要,因为这直接影响到应用的用户体验。本文将从...

    android事件分发机制

    ### Android事件分发机制详解 #### 一、触摸事件涉及的核心类 在Android系统中,触摸事件主要由两类核心对象负责处理:`ViewGroup` 和 `View`。 1. **ViewGroup**:作为容器,继承自 `View`,用于容纳多个 `View`...

    view的事件分发机制demo2

    本文将深入探讨"view的事件分发机制demo2",并基于链接提供的详细讲解进行总结。 Android事件分发机制主要包括三个步骤: DispatchTouchEvent(事件传递)、onInterceptTouchEvent(拦截事件)和onTouchEvent(处理...

    [android][Android点击事件分发机制分析]

    总结来说,Android点击事件的分发机制是一个复杂而有序的过程,理解并掌握这一机制,能够帮助开发者更好地控制界面交互,提升用户体验。通过合理利用事件分发,可以实现更高效、更灵活的UI设计,如自定义控件的交互...

    Android Touch事件分发机制代码一

    总结,Android的Touch事件分发机制是理解用户交互和视图层次结构的关键。通过深入理解这一机制,开发者可以更好地控制应用中的UI行为,提供更丰富的用户体验。"EventDispatchTest"示例就是一个很好的实践平台,帮助...

    Android事件分发机制的PPT总结

    Android事件分发机制是Android系统中处理用户输入的一个重要组成部分,它负责将触摸事件从系统底层传递到应用层的各个组件。一个事件分发的过程从硬件接收到触摸信号开始,经过Android系统内核的处理,最终到达应用...

    android中触摸事件的分发机制

    总结,Android触摸事件的分发机制是Android UI交互的基础,理解这一机制有助于开发者更有效地控制视图的行为,创建出更加丰富的用户界面。在实际开发中,可以通过灵活运用`onTouchEvent()`和`onInterceptTouchEvent...

    android事件分发机制窗帘效果

    总结来说,Android事件分发机制是应用程序响应用户输入的关键途径,而窗帘效果则是通过巧妙运用动画和事件处理,为用户带来生动的交互体验。在实际开发中,理解并掌握这两点,能够帮助开发者创建出更具吸引力和用户...

    事件分发机制学习Demo

    总结来说,事件分发机制是Android UI交互的关键部分,理解并掌握它对于开发高效、用户体验良好的应用至关重要。通过"事件分发机制学习Demo"和"TouchTestApplication"的实践,你可以更好地理解这一机制,并在实际项目...

    android事件分发流程

    在Android系统中,事件分发流程是用户与应用程序交互的核心机制。...本文将深入解析Android事件分发的详细过程,帮助开发者理解这一关键...在实际开发中,合理利用事件分发机制,可以实现更加丰富和精细的用户交互体验。

    view的事件分发机制demo

    在Android开发中,View的事件分发机制是一个至关重要的概念,它决定了用户与界面交互时事件的处理流程。本文将详细解析这一机制,帮助开发者理解并优化应用的用户体验。 事件分发机制主要涉及三个方法:`...

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

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

    Android事件分发测试Demo

    在Android系统中,事件分发是用户界面交互的核心机制,它决定了用户触摸屏幕后,事件如何...通过分析和运行"MotionEventMyTest",开发者能更好地理解和运用事件分发机制,从而编写出更加灵活和响应迅速的Android应用。

    android事件分发

    下面将详细阐述Android事件分发机制及其相关知识点。 一、事件分发概述 Android事件分发主要分为三个阶段:dispatchTouchEvent(), onInterceptTouchEvent() 和 onTouchEvent()。这三个方法共同构成了事件的传递链,...

    事件分发机制解决解决ScollView中嵌套ListView的问题

    首先,我们需要理解Android的事件分发机制。在Android中,事件分发分为三个阶段:dispatchTouchEvent、onTouchEvent和onInterceptTouchEvent。当一个触摸事件发生时,它会从顶级父布局开始,逐级向下传递,直到某个...

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

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

    Android事件传递机制

    总结来说,Android的事件传递机制是其用户界面响应用户输入的关键。理解并掌握这个机制,可以帮助开发者更精确地控制视图的行为,创建出更富交互性的应用。通过合理利用onTouchEvent()和onInterceptTouchEvent(),...

Global site tag (gtag.js) - Google Analytics