Android事件机制

Android事件机制,第1张

概述Android事件机制提出问题Android是如何响应对其中的某个视图的触控 *** 作?——MotionEvent机制Android是如何响应对手机的按键 *** 作?——KeyEvent机制屏幕触控(MotionEvent)机制事件类型Down-手指按下、move-手指在屏幕移动、up-手指离开事件发生顺序down——move——mov— AndroID事件机制提出问题

AndroID是如何响应对其中的某个视图的触控 *** 作?——MotionEvent机制
AndroID是如何响应对手机的按键 *** 作?——KeyEvent机制

屏幕触控(MotionEvent)机制

事件类型
Down-手指按下、move-手指在屏幕移动、up-手指离开

事件发生顺序
down——move——mov——move——…——up
对屏幕的任何一个 *** 作, 系统都会创建一个MotionEvent对象来对应这个 *** 作。

相关API
MotionEvent:
触屏事件——数据封装体,封装了对屏幕的 *** 作
主要包含 *** 作类型【getAction()】和 *** 作坐标【getX()\getY()\getRawX()\getRawY()】。

Activity:
boolean dispatchtouchEvent(MotionEvent event) : 分发事件,将事件分发给布局
boolean ontouchEvent(MotionEvent event) : 处理事件的回调(备胎)

【回调方法:主要知道何时调用、调用具体做什么事】

VIEw:
boolean dispatchtouchEvent(MotionEvent event) : 分发事件
boolean ontouchEvent(MotionEvent event) : 处理事件的回调方法
voID setontouchListener(OntouchListener l) : 设置事件监听器
voID setonClickListener(OnClickListener l) : 设置点击监听
voID setonLongClickListener(OnLongClickListener l) : 设置长按监听
voID setonCreateContextMenuListener(OnCreateContextMenuListener l) : 用于创建菜单

VIEwGroup:
boolean dispatchtouchEvent(MotionEvent ev) : 分发事件
boolean onIntercepttouchEvent(MotionEvent ev) : 拦截事件的回调方法

*** 作事件

分发——dispathtouchEvent()
处理——ontouchEvent()、ontouch()
消费——处理事件的方法返回true,当前事件对象就结束了
【拦截、反拦截】

事件分发和处理

事件产生的顺序为: down–>move–>move…—>up
事件对象被系统创建后, 首先会调用对应Activity对象的dispatchtouchEvent()进行分发,down在分发给视图对象的过程中要确定消费者(ontouchEvent()返回true),如果都返回false, 那事件的消费者只能是Activity了。后面的move和up事件, 将事件分发给消费者(可能是视图对象,也可能是Activity)处理, 如果视图不消费, 直接交给Activity处理消费。每个事件都需要有一个消费者。
【事件分发处理流程图】

KeyEvent按键机制

按键机制理解
*** 作的基本类型:down : 手指按下;up : 手指从按键上离开
按键 *** 作的顺序: down -> down -> down -> …—>up
对按键的任何一个 *** 作, 系统都会创建一个KeyEvent对象来对应这个 *** 作
按键的长按监听: down之后一定时间还没有up时会触发长按监听回调

相关API
KeyEvent:
int ACTION_DOWN = 0 : 标识down的常量
int ACTION_UP = 1 : 标识up的常量
int getAction() : 得到事件类型
int getKeyCode() : 得到按键的keycode(唯一标识)
startTracking() : 追踪事件, 用于长按监听

Activity:
boolean dispatchKeyEvent(KeyEvent event) : 分发事件
boolean onKeyDown(int keyCode, KeyEvent event) : 按下按键的回调
boolean onKeyUp(int keyCode, KeyEvent event) : 松开按键的回调
boolean onKeyLongPress(int keyCode, KeyEvent event) : 长按按键的回调

总结

以上是内存溢出为你收集整理的Android事件机制全部内容,希望文章能够帮你解决Android事件机制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1031871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存