想要触发on two fingers down
事件几毫秒。
我可以使用以下代码触发简单的触摸事件:
objImageView.getLocationOnScreen(coords);
int xa = coords[0];
int ys = coords[1];
objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0));
objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0));
objImageView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0));
现在,如果我尝试为ACTION_POINTER_DOWN做同样的事情,那么就不会发生任何事情。这是我的代码:
int[] coords = new int[2];
parentLayout.getLocationOnScreen(coords);
int xa = coords[0];
int ys = coords[1];
parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_POINTER_DOWN, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0));
parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0));
parentLayout.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_POINTER_UP, xa, ys, 0.5f, 5, 0, 1, 1, 0, 0));
我想触发同一个事件,当用户将两个手指放下并在那里按住手指几毫秒时调用该事件。
答案 0 :(得分:1)
Documentation说:"手势以ACTION_DOWN的动作事件开始,提供第一个指针向下的位置。当每个附加指针向下或向上时,框架将相应地生成带有ACTION_POINTER_DOWN或ACTION_POINTER_UP的运动事件。"所以你首先需要触发简单的触摸事件。并查看this问题。
答案 1 :(得分:1)
您应该生成如下序列:ACTION_DOWN
- > ACTION_POINTER_DOWN
- >可选的小延迟 - > ACTION_POINTER_UP
- > ACTION_UP
。
您还应该为第二个指针正确设置指针索引(和其他元数据),否则手势检测代码可能无法告诉ACTION_POINTER_DOWN
次要按键是描述辅助手指,而不是主要手指。
使用this method填写描述第二次按下的ACTION_POINTER_DOWN的所有必要信息。 确保传递正确的pointerProperties
!
答案 2 :(得分:1)
模拟"两根手指"你需要创建一个包含超过一个指针的运动事件,就像现在一样。
为此,请使用支持多个指针的MotionEvent obtain
变体,如文档here所示。
MotionEvent obtain (long downTime,
long eventTime,
int action,
int pointerCount,
PointerProperties[] pointerProperties,
PointerCoords[] pointerCoords,
int metaState,
int buttonState,
float xPrecision,
float yPrecision,
int deviceId,
int edgeFlags,
int source,
int flags)
首先,您应该为第一个手指发送一个事件(与您完全一样),当您要模拟MotionEvent.ACTION_POINTER_DOWN
时,您应该使用上述obtain
变体。
字段非常自我解释,请确保参数: