美文网首页
View 事件传递原理

View 事件传递原理

作者: gczxbb | 来源:发表于2019-07-29 11:10 被阅读0次

触屏是用户和手机交互的基础,手指触屏时产生一系列事件,控制视图改变,在树形视图中,事件从顶层向下传递。

树结构叶子视图事件传递

视图是树结构叶子节点,无子视图,不管是 ViewGroup 或 View 类型,调用基类View 类的 dispatchTouchEvent() 方法。

public boolean dispatchTouchEvent(MotionEvent event) {
    boolean result = false;
    ...
    final int actionMasked = event.getActionMasked();
    if (actionMasked == MotionEvent.ACTION_DOWN) {
        stopNestedScroll();
    }
    if (onFilterTouchEventForSecurity(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;
        }
    }
    if (actionMasked == MotionEvent.ACTION_UP ||
            actionMasked == MotionEvent.ACTION_CANCEL ||
            (actionMasked == MotionEvent.ACTION_DOWN && !result)) {
        stopNestedScroll();
    }
    return result;
}

onTouchListener 监听器,优先级较高,调用 Touch 监听器的 onTouch() 方法,如果未消费,调用自己的 onTouchEvent() 方法。

注意,树结构最底部的叶子节点不一定是 View 类型,也可以是 ViewGroup 类型,一个ViewGroup类型叶子节点视图未消费事件,也会调用它的基类 View 的 dispatchTouchEvent() 方法,自己处理。

View 类的 onTouchEvent() 方法,当 viewFlags 支持 CLICKABLE,LONG_CLICKABLE 标志位,视图可点击,该方法会消费事件,且在 up 事件时, performClick() 方法触发点击监听,Button 控件支持 CLICKABLE 标志,TextView 控件不支持,触摸时不会消费事件。

可以重写子类 View 的 onTouchEvent() 方法,控制视图消费事件,也可以添加Touch监听器。

一个视图自身是否消费事件,由 onTouchListener 监听器和 View 的 onTouchEvent() 方法共同决定。


任重而道远

相关文章

  • View 事件传递原理

    触屏是用户和手机交互的基础,手指触屏时产生一系列事件,控制视图改变,在树形视图中,事件从顶层向下传递。 树结构叶子...

  • 事件分发

    事件分发原理: 责任链模式,事件层层传递,直到被消费。 View 的 dispatchTouchEvent 主要用...

  • 事件分发核心原理

    1.事件分发原理: 责任链模式,事件层层传递,直到被消费。 2.View 的dispatchTouchEvent主...

  • View的事件分发基本过程

    基本过程 View事件分发的原理是责任链模式,事件层层传递,直到被消费。 从Activity->PhoneWind...

  • Android 事件传递机制

    一、事件分发的原理 1、事件是如何传递的: 首先由Activity分发,分发给根View,也就是DecorView...

  • 事件分发:事件的传递和传递路径

    事件传递方向activity -> viewGroup -> view 事件的传递入口 事件触发 -> 硬件 ->...

  • iOS事件传递&视图响应链

    1.事件传递的流程: 2.事件传递图示 如果想让某个view不能处理事件(或者说,事件传递到某个view那里就断了...

  • View的事件体系(下)

    目录 View的事件分发机制 View的滑动冲突 View的事件分发机制 点击事件的传递规则 View的点击事件的...

  • Activity、ViewGroup和View触摸事件分发机制总

    View触摸屏事件传递机制 整个View的事件转发流程是:View.dispatchEvent->View.set...

  • View事件分发简单理解

    1.view事件传递方向 Activity -> window -> view 2.了解事件传递,必须知道以下三个...

网友评论

      本文标题:View 事件传递原理

      本文链接:https://www.haomeiwen.com/subject/grgvrctx.html