Android手势处理及模拟滑动事件

本文介绍了Android中手势处理的机制,包括GestureDetector类及其相关接口,如OnGestureListener、OnDoubleTapListener。详细讲解了OnDown、onShowPress、OnSingleTapUp、OnScroll、OnLongPress和OnFling等手势事件。并展示了如何通过Instrumentation模拟滑动事件来触发onFling。
摘要由CSDN通过智能技术生成

按键或者触摸屏事件产生以后,触摸屏驱动程序会依据事件的类别按照操系统对事件的定义将事件告诉操作系统。Android操作系统中存在一个WindowManagerService服务,此服务会将收到的事件分发给当前可见的Activity,Activity同时会将事件分发给此Activity中的控件,如果Activity中实现了手势或者触摸事件的处理,则会调用Activity的事件处理函数,同样Activity中的控件如果实现了相应事件的处理函数,则会调用此控件的事件处理函数。
GestureDetector类内部有三个接口OnGestureListener接口(用于实现各种手势的事件处理)和OnDoubleTapListener接口(用于实现双击事件的处理)和OnContextClickListener接口以及一个内部类SimpleOnGestureListener,内部类SimpleOnGestureListener实现了上述三个接口,但是接口函数都是空的。如果我们想实现新的事件处理,可以继承GestureDetector的内部类SimpleOnGestureListener实现我们感兴趣的的事件,或者实现GestureDetector的内部接口,根据需要实现的事件不同需要实现不同的接口。
OnGestureListener接口中定义的手势处理接口有如下6个接口:
(1)OnDown:用户轻触触摸屏,由一个MotionEvent.ACTION_DOWN触发(按下立即触发)。
(2)onShowPress:用户轻触触摸屏,尚未松开或者拖动,由一个MotionEvent.ACTION_DOWN。(用户按下之后不会立即触发,而是一段时间之后没有松开的话才会触发)
(3)OnSingleTapUP:用户轻触触摸屏后松开,由一个MotionEvent.ACTION_UP触发。
(4)OnScroll:用户按下触摸屏并拖动,由一个MotionEvent.ACTION_DOWN多个MotionEvent.ACTION_DOWN触发。
(5)OnLongPress:用户长按触摸屏,由多个MotionEvent.ACTION_DOWN触发。
(6)OnFling:用户按下触摸屏快速移动后松开,由一个MotionEvent.ACTION_DOWN多个MotionEvent.ACTION_MOVE和触发一个MotionEvent.ACTION_UP触发。第一个ACTION_MOVE和ACTION_DOWN坐标,时间点是一样的,即除了ACTION不同以外其它信息是相同的。最后一个ACTION_MOVE和ACTION_UP除了ACTION不同以外其它信息也是一样的。
我们了解了事件触发的机制,可以利用Android系统提供的接口以软件的方式模拟各种事件的发生。我们以onFling事件为例:
Instrumentation inst = new Instrumentation();
long dowTime = SystemClock.uptimeMillis();
inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime,
MotionEvent.ACTION_DOWN, x, y,0));
inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime,
MotionEvent.ACTION_MOVE, x, y,0));
inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime+20,
MotionEvent.ACTION_MOVE, x+20, y,0));
inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime+30,
MotionEvent.ACTION_ MOVE, x+40, y,0));
inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime+40,
MotionEvent.ACTION_ MOVE, x+60, y,0));
inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime+40,
MotionEvent.ACTION_UP, x+60, y,0));
 一个.ACTION_DOWN多个ACTION_MOVE以及一个ACTION_UP即可触发onFling事件。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值