安卓事件传递机制

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓事件传递机制相关的知识,希望对你有一定的参考价值。

1.触摸事件 MotionEvent
ACTION_DOWN:按下
ACTION_MOVE:移动
ACTION_UP:松开

2.以上三个触摸事件都会经历三个函数
事件分发(Dispatch):dispatchTouchEvent
事件拦截 (Intercept):onInterceptTouchEvent
事件消费 (Consume):onTouchEvent

分发的规则:从外层到内层 Activity->ViewGroup->View
分发之后看,屏幕内是否有消费事件的,如果没有就被Activity自己消费
在这里插入图片描述
拦截(橙色菱形)默认是false
下面的代码返回true说明不再向下分发了,就会被当前的onTouchEvent自己消费

@Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        Log.d(TAG, "Custom onInterceptTouchEvent");
        return super.onInterceptTouchEvent(ev);//默认都是false
    }
@Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.d(TAG, "onTouchEvent Custom: ACTION_DOWN");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.d(TAG, "onTouchEvent Custom: ACTION_MOVE");
                break;
            case MotionEvent.ACTION_UP:
                Log.d(TAG, "onTouchEvent Custom: ACTION_UP");
                break;
            case MotionEvent.ACTION_CANCEL:
                Log.d(TAG, "onTouchEvent Custom: ACTION_CANCEL");
                break;
        }
        return super.onTouchEvent(event);//默认也是FALSE
    }

下面的代码返回true说明textView进行了消费(onTouch被重写了)

textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        Log.d(TAG, "onTouch textView: ACTION_DOWN");
                        break;
                    case MotionEvent.ACTION_MOVE:
                        Log.d(TAG, "onTouch textView: ACTION_MOVE");
                        break;
                    case MotionEvent.ACTION_UP:
                        Log.d(TAG, "onTouch textView: ACTION_UP");
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        Log.d(TAG, "onTouch textView: ACTION_CANCEL");
                        break;
                }
                return true;
            }
        });

3.事件传递机制的应用场景
下拉刷新控件
在这里插入图片描述
在这里插入图片描述

以上是关于安卓事件传递机制的主要内容,如果未能解决你的问题,请参考以下文章

Android焦点事件分发与传递机制

安卓 handle运行机制,泛型,事件分发机制

安卓事件分发机制

Android :安卓学习笔记之 事件分发机制 的简单理解和使用

安卓学习笔记07:事件处理窗口跳转与传递数据

Android事件传递