没有合适的资源?快使用搜索试试~ 我知道了~
深入理解 Android事件分发机制源码(基于9.0)
1 下载量 64 浏览量
2021-01-03
19:17:43
上传
评论
收藏 59KB PDF 举报
温馨提示
touch事件最开始从Activity 的 dispatchTouchEvent() 方法开始的 /frameworks/base/core/java/android/app/Activity.java /** * Called to process touch screen events. You can override this to * intercept all touch screen events before they are dispatched to the * window. Be sure to call this implementation for to
资源推荐
资源详情
资源评论
深入理解深入理解 Android事件分发机制源码(基于事件分发机制源码(基于9.0))
touch事件最开始从Activity 的 dispatchTouchEvent() 方法开始的
/frameworks/base/core/java/android/app/Activity.java
/**
* Called to process touch screen events. You can override this to
* intercept all touch screen events before they are dispatched to the
* window. Be sure to call this implementation for touch screen events
* that should be handled normally.
*
* @param ev The touch screen event.
*
* @return boolean Return true if this event was consumed.
*/
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
onUserInteraction();
}
//这一段逻辑很重要,我们大部分界面的touch事件,都是从这里开始传的
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
//调用Activity自身的onTouchEvent()方法
return onTouchEvent(ev);
}
getWindow() 相信很多人都知道,我们在需要 Acitivity 全屏或者开发一些主题效果时经常用到,它是返回的 Window 对象。
/frameworks/base/core/java/android/app/Activity.java
/**
* Retrieve the current {@link android.view.Window} for the activity.
* This can be used to directly access parts of the Window API that
* are not available through Activity/Screen.
*
* @return Window The current window, or null if the activity is not
* visual.
*/
public Window getWindow() {
return mWindow;
}
在Android系统中,Window 类是一个抽象类,目前唯一的实现类是 PhoneWindow.java,我们从官方给 Window 类的注释中
就可以看出来。
/framworks/base/core/java/android/view/Window.java
/**
* Abstract base class for a top-level window look and behavior policy. An
* instance of this class should be used as the top-level view added to the
* window manager. It provides standard UI policies such as a background, title
* area, default key processing, etc.
*
* The only existing implementation of this abstract class is
* android.view.PhoneWindow, which you should instantiate when needing a
* Window.译:这个抽象类的唯一实现类是PhoneWindow,当你需要一个Window时应对首先其进行实例化
*/
public abstract class Window {
...
}
我们紧接着看 PhoneWindow 的 superDispatchTouchEvent 方法,逻辑也很简单。
/framworks/base/core/java/com/android/internal/policy/PhoneWindow.java
资源评论
weixin_38735887
- 粉丝: 3
- 资源: 902
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功