AI智能
改变未来

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


前言

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

概述

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

dispatchTouchEvent

onTouchEvent

。事件分发顺序从前者到后者。

代码

代码基于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,该值就为trueboolean 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) 打赏
未经允许不得转载:爱站程序员基地 » Android事件分发超简单的代码总结篇(一)