<一>Android事件处理:
1、Android提供了两种方式的事件处理:
(1)
回调事件处理:通过重写组件特定的方法实现回调事件处理,事件的发生者和事件的处理者是同
一个对象
监听器的事件处理:通过编写监听类绑定组件实现监听事件处理,事件的发生者和事件的处理者
不是同一个对象
(2)从小范围扩展到到大范围(myButton---->Activity),由监听事件返回的true或false决定
是否传播,如果为true就不传播,为false就传播
(3)好处:开发出界面友好人机交互良好的Android应用
(4)常用的监听器
监听点击事件:View.OnclickListener
监听长按事件:View.OnLongClikListener
监听触摸事件:View.OnTouchListener
监听焦点改变:View.OnFocusChangeListener
与长按监听一起使用,生成菜单:View.OnCreateContextMenuListener
<二>触摸事件解析:
触摸处理方法的返回值是控制触摸事件的传播性的。
<1>当返回值为false时,代表本方法对这次触摸事件不感兴趣,这次触摸的时间序列的后续动作
处理就会转交给上一级,本方法不再理会。
<2>当返回值为true时,代表本方法对这次触摸事件感兴趣,这次触摸事件序列的后续动作就会直
接由该方法处理,不会再传播给上一级
<3>当按钮的触摸监听事件和按钮的触摸回调事件同时存在,取决权决与:按钮的触摸监听事件
触摸操作是由一系列的动作组成,一次触摸至少包含一次手指的按下、移动、抬起3个事件
onTouch()方法:
单点触摸时:
action=0 代表手指按下
action=1 代表手指抬起
action=2 代表手指移动
多点触摸时:
aciton=0 代表手指1按下
action=261 代表手指2按下
action=517 代表手指3按下
action=518 代表手指3抬起
action=262 代表手指2抬起
action=1 代表手指1抬起
注意:在多点触摸时,获得的action的值是一个复合码,这个复合码是一个八位的十六进制数
第二个手指按下,action=261,对应的十六进制数为0X00000105,其中第2个字节01代表手指
的指针索引,第一个字节05是它的动作编码,按下事件,06代表抬起
无论是单点触摸,还是多点触摸,手指移动的action都是=2
获得屏幕上的手指的数量:event.getPointerCount()
指针索引:每一个手指按照顺序编号,随着屏幕上的手指数量的不同,每一个手指的指针索引会
发生改变
指针id:event.getPointerId(指针索引),相当于每一个手指的名字,一旦确定不再变化
获得每一个手指的坐标:
float x=event.getX(指针索引);
float y=event.getY(指针索引);
注意:默认(不带参数的)获取到的x和y是索取第一个手指的坐标
解析手指的action,拿到每一个pointIndex和action_code
int pointIndex=action>>8;
int action_code=action&0x00000ff;
1、Android提供了两种方式的事件处理:
(1)
回调事件处理:通过重写组件特定的方法实现回调事件处理,事件的发生者和事件的处理者是同
一个对象
监听器的事件处理:通过编写监听类绑定组件实现监听事件处理,事件的发生者和事件的处理者
不是同一个对象
(2)从小范围扩展到到大范围(myButton---->Activity),由监听事件返回的true或false决定
是否传播,如果为true就不传播,为false就传播
(3)好处:开发出界面友好人机交互良好的Android应用
(4)常用的监听器
监听点击事件:View.OnclickListener
监听长按事件:View.OnLongClikListener
监听触摸事件:View.OnTouchListener
监听焦点改变:View.OnFocusChangeListener
与长按监听一起使用,生成菜单:View.OnCreateContextMenuListener
<二>触摸事件解析:
触摸处理方法的返回值是控制触摸事件的传播性的。
<1>当返回值为false时,代表本方法对这次触摸事件不感兴趣,这次触摸的时间序列的后续动作
处理就会转交给上一级,本方法不再理会。
<2>当返回值为true时,代表本方法对这次触摸事件感兴趣,这次触摸事件序列的后续动作就会直
接由该方法处理,不会再传播给上一级
<3>当按钮的触摸监听事件和按钮的触摸回调事件同时存在,取决权决与:按钮的触摸监听事件
触摸操作是由一系列的动作组成,一次触摸至少包含一次手指的按下、移动、抬起3个事件
onTouch()方法:
单点触摸时:
action=0 代表手指按下
action=1 代表手指抬起
action=2 代表手指移动
多点触摸时:
aciton=0 代表手指1按下
action=261 代表手指2按下
action=517 代表手指3按下
action=518 代表手指3抬起
action=262 代表手指2抬起
action=1 代表手指1抬起
注意:在多点触摸时,获得的action的值是一个复合码,这个复合码是一个八位的十六进制数
第二个手指按下,action=261,对应的十六进制数为0X00000105,其中第2个字节01代表手指
的指针索引,第一个字节05是它的动作编码,按下事件,06代表抬起
无论是单点触摸,还是多点触摸,手指移动的action都是=2
获得屏幕上的手指的数量:event.getPointerCount()
指针索引:每一个手指按照顺序编号,随着屏幕上的手指数量的不同,每一个手指的指针索引会
发生改变
指针id:event.getPointerId(指针索引),相当于每一个手指的名字,一旦确定不再变化
获得每一个手指的坐标:
float x=event.getX(指针索引);
float y=event.getY(指针索引);
注意:默认(不带参数的)获取到的x和y是索取第一个手指的坐标
解析手指的action,拿到每一个pointIndex和action_code
int pointIndex=action>>8;
int action_code=action&0x00000ff;
本文详细介绍了Android中事件处理的两种方式:回调事件处理和监听器事件处理,并重点讲解了触摸事件的处理机制。讨论了触摸事件的传播性和返回值的影响,列举了常用监听器类型。在触摸事件中,区分了单点触摸和多点触摸的ACTION码,以及如何获取手指数量、指针索引和坐标。

1079

被折叠的 条评论
为什么被折叠?



