Android 双指同时点击事件模拟
来源:互联网 发布:linux shell 睡眠 编辑:程序博客网 时间:2024/05/16 09:25
Android 双指同时点击事件模拟
今天有个需求是要通过双指同时点击屏幕来触发某个功能,特此看那了下Android多点触控的API,首先发现 MotionEvent 类里面有些 ACTION_POINTER_2_DOWN 、 ACTION_POINTER_3_DOWN 这样的常量,应该就是和多点触摸相关的。
下面在Activity里面重写dispatchTouchEvent方法试验:
@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) { Log.v("TouchEvent", "action== " + ev.getAction()); return true;}(1)单指点击,类似SingleTap,输出log:
public static final int ACTION_DOWN = 0;public static final int ACTION_UP = 1;public static final int ACTION_MOVE = 2;0、1、2分别与上面的事件对应,表示按下、移动、抬起。(2)单指长按后抬起:可以看到中间多出一些 ACTION_MOVE 的事件。
(3)双指同时点击:
中间多了 251、252两个数字,如下分别是与ACTION_POINTER_2_DOWN、ACTION_POINTER_2_UP对应的,这里是指第二只手指按下和抬起的事件。
public static final int ACTION_POINTER_DOWN = 5;public static final int ACTION_POINTER_UP = 6;public static final int ACTION_POINTER_2_DOWN = ACTION_POINTER_DOWN | 0x0100; //261public static final int ACTION_POINTER_2_UP = ACTION_POINTER_UP | 0x0100; //262另外,双指点击的时候也可能出现下面的log:
那么现在就根据上面的试验,组合出“双指点击”这一事件,代码如下:private int mTouchRepeat = 0; //过滤掉长按的情况private boolean mPoint2Down = false; //是否出现双指按下的情况@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: mPoint2Down = false; mTouchRepeat = 0; break; case MotionEvent.ACTION_MOVE: mTouchRepeat++; break; case MotionEvent.ACTION_POINTER_2_DOWN: mPoint2Down = true; break; case MotionEvent.ACTION_POINTER_UP: if (mPoint2Down && mTouchRepeat < 10) { //do something here Log.v("tap_tap_event", "It works!"); } break; } return true;}实际上,上面的代码除了双指点击时会触发事件,三指同时点击也会出现这种情况:在最上面的试验中,如果三指同时点击,会出现下面的输出:
public static final int ACTION_POINTER_3_DOWN = ACTION_POINTER_DOWN | 0x0200;public static final int ACTION_POINTER_3_UP = ACTION_POINTER_UP | 0x0200;其中也包含了双指点击的所有独立事件,这样的话还需要过滤掉三指同时点击的情况,代码如下:private int mTouchRepeat = 0;private boolean mPoint2Down = false;private boolean mThreePointDown = false;@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: mPoint2Down = false; mThreePointDown = false; mTouchRepeat = 0; break; case MotionEvent.ACTION_MOVE: mTouchRepeat++; break; case MotionEvent.ACTION_POINTER_2_DOWN: mPoint2Down = true; break; case MotionEvent.ACTION_POINTER_3_DOWN: mThreePointDown = true; break; case MotionEvent.ACTION_POINTER_UP: if (mPoint2Down && mTouchRepeat < 10 && !mThreePointDown) { //do something here Log.v("tap_tap_event", "It works!"); } break; } return true;}
0 0
- Android 双指同时点击事件模拟
- Android下模拟点击事件
- Android listview模拟点击事件
- Android Instrumentation模拟鼠标点击事件
- android开发模拟click点击事件
- Android adb 模拟滑动 按键 点击事件
- Android-----adb 模拟滑动 按键 点击事件
- Android adb 模拟滑动 按键 点击事件
- Android adb 模拟滑动 按键 点击事件
- Android adb 模拟滑动 按键 点击事件
- android中怎么模拟点击事件
- Android Instrumentation模拟鼠标点击事件
- Android代码模拟物理、屏幕点击事件
- android ADB 模拟手机点击事件
- Android adb 模拟滑动 按键 点击事件
- Android adb 模拟滑动 按键 点击事件
- Android模拟屏幕点击,滑动等事件
- Android shell获取和模拟点击事件
- 各类HTTP返回状态代码详解
- ES6学习6(Symbol)
- oracle 创建表空间、用户、授权的详细操作sql语句
- 2017微软秋季校园招聘在线编程笔试
- 移动通信的概念
- Android 双指同时点击事件模拟
- 好久没有写博客了
- 418 Sentence Screen Fitting
- 关于写了阅读器后的总结
- 项目总结
- 操作系统实验之进程管理
- Babylon.js入门简介和开发实例
- matrix4
- 智能小车的制作(七)