Android事件分发超简单的代码总结篇(一)

前言

与网上其它诸多此类的文章不同,我希望能以最简洁的方式描述清楚整个过程,而最简洁的方式是什么呢?没错,就是代码!简洁的代码!所以我从源码中把涉及到事件分发部分的代码都抽取出来,精简掉无用的,只保留平时常见的部分,一眼就能看明白的那种。

概述

Android的事件分发流程分为两个部分,View的事件分发和ViewGroup事件分发,这篇先讲View的事件分发。View的事件分发主要涉及到两个相关函数 dispatchTouchEventonTouchEvent。事件分发顺序从前者到后者。

代码

代码基于API27(Android 8.1)SDK源码精简而来

dispatchTouchEvent
public boolean dispatchTouchEvent(MotionEvent event) {
    boolean result = false;

    // touchListener就是通过setOnTouchListener设置的监听器
    if (touchListener != null
            && isEnabled()
            && touchListener.onTouch(this, event)) {
        result = true;
    }

    if (!result && onTouchEvent(event)) {
        result = true;
    }
    return result;
}
onTouchEvent
public boolean onTouchEvent(MotionEvent event) {
    // click, longClick, contextClick任意被设置一个,该值就为true
    // clickable, longClickable, contextClickable任意一个为true,该值就为true
    boolean mClickable = false;
    if (!isEnabled()) {
        return mClickable
    }

    // mTouchDelegate为通过setTouchDelegate设置的代理
    if (mTouchDelegate != null) {
        if (mTouchDelegate.onTouchEvent(event)) {
            return true;
        }
    }

    if (mClickable) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_UP:
                // onClick就是通过setOnClickListener注册的监听器
                onClick(this);
                break;
            default:
                break;
        }
        return true;
    }

    return false;
}

总结

View的分发还是很简单的,下一篇说ViewGroup

链接

Android事件分发超简单的代码总结篇(二)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值