`

android 事件处理机制总结

阅读更多

onTouchEvent的传递

 

当有多个层级的View时,在父层级允许的情况下,这个action会一直向下传递直到遇到最深层的View。所以touch事件最先调用的是最底层View的onTouchEvent,如果View的onTouchEvent接收到某个touch action并作了相应处理,最后有两种返回方式return true和return false;return true会告诉系统当前的View需要处理这次的touch事件,以后的系统发出的ACTION_MOVE,ACTION_UP还是需要继续监听并接收的,而且这次的action已经被处理掉了,父层的View是不可能触发onTouchEvent了。所以每一个action最多只能有一个onTouchEvent接口返回true。如果return false,便会通知系统,当前View不关心这一次的touch事件,此时这个action会传向父级,调用父级View的onTouchEvent。但是这一次的touch事件之后发出的任何action,该View都不会再接受,onTouchEvent在这一次的touch事件中再也不会触发,也就是说一旦View返回false,那么之后的ACTION_MOVE,ACTION_UP等ACTION就不会在传入这个View,但是下一次touch事件的action还是会传进来的。

 

父层的onInterceptTouchEvent截获

 

前面说了底层的View能够接收到这次的事件有一个前提条件:在父层级允许的情况下。假设不改变父层级的dispatch方法,在系统调用底层onTouchEvent之前会先调用父View的onInterceptTouchEvent方法判断,父层View是不是要截获本次touch事件之后的action。如果onInterceptTouchEvent返回了true,那么本次touch事件之后的所有action都不会再向深层的View传递,统统都会传给父层View的onTouchEvent,就是说父层已经截获了这次touch事件,之后的action也不必询问onInterceptTouchEvent,在这次的touch事件之后发出的action时onInterceptTouchEvent不会再次调用,直到下一次touch事件的来临。如果onInterceptTouchEvent返回false,那么本次action将发送给更深层的View,并且之后的每一次action都会询问父层的onInterceptTouchEvent需不需要截获本次touch事件。只有ViewGroup才有onInterceptTouchEvent方法,因为一个普通的View肯定是位于最深层的View,touch事件能够传到这里已经是最后一站了,肯定会调用View的onTouchEvent。

 

底层View的getParent().requestDisallowInterceptTouchEvent(true)

 

对于底层的View来说,有一种方法可以阻止父层的View截获touch事件,就是调用getParent().requestDisallowInterceptTouchEvent(true);方法。一旦底层View收到touch的action后调用这个方法那么父层View就不会再调用onInterceptTouchEvent了,也无法截获以后的action(如果父层ViewGroup和最底层View需要截获不同焦点,或不同手势的touch,不能使用这个写死)。

 

//通知父层ViewGroup,你不能截获
public boolean dispatchTouchEvent(MotionEvent ev) {   
    getParent().requestDisallowInterceptTouchEvent(true);  
    return super.dispatchTouchEvent(ev);    
}  

//也可以写成这样,当用户按下的时候,我们告诉父组件,不要拦截我的事件(这个时候子组件是可以正常响应事件的),拿起之后就会告诉父组件可以阻止。
public boolean onTouch(View v, MotionEvent event) {  
   switch (event.getAction()) {  
   case MotionEvent.ACTION_MOVE:   
       pager.requestDisallowInterceptTouchEvent(true);  
       break;  
   case MotionEvent.ACTION_UP:  
   case MotionEvent.ACTION_CANCEL:  
       pager.requestDisallowInterceptTouchEvent(false);  
       break;  
}

 

原文链接:http://www.jianshu.com/p/a2185e4b1b53

分享到:
评论

相关推荐

    Android事件分发机制总结Demo

    本文将深入探讨“Android事件分发机制总结Demo”,结合代码实例MyTouchEventDemo,帮助开发者清晰理解这一核心概念。 事件分发机制主要涉及三个关键组件:View、ViewGroup(布局)和MotionEvent。当用户触摸屏幕时...

    Android 事件处理机制

    总结,Android事件处理机制是构建用户友好、响应迅速的应用程序的基础。理解和熟练掌握事件冒泡、监听器以及消息队列的使用,能帮助开发者更好地设计和实现应用程序的交互逻辑。在实际开发中,灵活运用这些机制,...

    Android基本控件事件总结

    在Android开发中,基本控件是构建...了解并熟练掌握这些控件的事件处理机制,对于构建功能丰富的Android应用程序至关重要。在实际开发中,开发者可以根据需求结合这些基本控件和事件,构建出各种复杂的用户交互场景。

    android事件分发机制

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

    android之Touch事件处理机制测试

    总结,理解并熟练运用Android的Touch事件处理机制对于优化用户界面交互至关重要。开发者需要掌握事件的分发、拦截以及在ViewGroup中的处理策略,以便在实际应用中解决滑动冲突,提升用户体验。在测试过程中,不断...

    Android 事件分发机制视频讲解

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

    android图片处理总结

    在Android平台上,图片处理是一项非常重要的任务,涵盖了从图片加载、显示、裁剪、缩放、滤镜应用到性能优化等多个方面。以下是对Android图片处理的一些关键知识点的详细阐述: 1. **图片加载**:在Android中,...

    Android事件分发机制的PPT总结

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

    Android事件传递机制

    总结,理解Android事件传递机制对于优化用户界面的交互体验至关重要。开发者应当熟练掌握事件的分发、处理和拦截过程,以便在实际项目中灵活应对各种复杂的交互需求。通过精确控制事件流,我们可以打造出更加智能、...

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

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

    Android的事件处理机制

    ### Android的事件处理机制 #### 一、概述 在Android应用开发中,用户与界面的交互至关重要。良好的用户体验往往依赖于应用对用户操作快速而准确的响应。这背后的核心技术便是**事件处理机制**。本文将详细介绍...

    Android 广播事件处理

    总结来说,Android的广播事件处理机制是应用程序与系统或其它应用间通信的重要方式。通过发送广播Intent和注册Broadcast Receiver,开发者能够响应系统级别的事件,或者自定义广播事件,实现应用间的交互。同时,...

    android中触摸事件的分发机制

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

    android事件分发流程

    总结来说,Android事件分发流程是一个复杂但重要的概念,理解并掌握它对于优化用户界面交互和提高应用性能至关重要。开发者应熟练掌握Activity、ViewGroup和View之间的事件传递规则,以及如何通过自定义行为来满足...

    Android Touch事件分发机制代码一

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

    android 事件传递demo

    总结,这个“android事件传递demo”项目为开发者提供了一个实践平台,通过“ViewsDemo”的代码,可以深入学习和理解Android中触摸事件的分发和处理流程,从而提升应用的用户体验。通过不断实践和调试,开发者能够...

    android事件分析

    在Android系统中,事件处理是应用交互的核心部分,它涵盖了用户与设备间的各种交互,如..."TL24_KeyEvent_test"可能就是一个实际案例,用于测试和学习如何处理键盘事件,这有助于开发者更好地掌握Android事件处理机制。

Global site tag (gtag.js) - Google Analytics