Android:如何创build一个MotionEvent?
MotionEvent没有得到一个构造函数,我想在我的unit testing中手动创build一个MotionEvent,那么如何获得? 谢谢。
您应该使用MotionEvent
类的静态obtain
方法之一来创build新事件。
最简单的方法(除了从现有的新事件包装)是:
static public MotionEvent obtain(long downTime, long eventTime, int action, float x, float y, int metaState) {
API文档 :
创build一个新的MotionEvent,填充基本运动值的一个子集。 那些没有在这里指定的是:设备id(总是0),压力和大小(总是1),x和y精度(总是1)和edgeFlags(总是0)。
参数 :
-
downTime
用户最初按下以启动位置事件stream的时间(以毫秒为单位)。 这必须从SystemClock.uptimeMillis()获得。 -
eventTime
生成此特定事件的时间(以毫秒为单位)。 这必须从SystemClock.uptimeMillis()
获得。 -
action
正在执行的操作types –ACTION_DOWN
,ACTION_MOVE
,ACTION_UP
或ACTION_CANCEL
。 -
x
此事件的X坐标。 -
y
此事件的Y坐标。 -
metaState
生成事件时有效的任何元/修饰键的状态。
链接到API文档
补充答案
下面是一个例子说明接受的答案:
// get the coordinates of the view int[] coordinates = new int[2]; myView.getLocationOnScreen(coordinates); // MotionEvent parameters long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); int action = MotionEvent.ACTION_DOWN; int x = coordinates[0]; int y = coordinates[1]; int metaState = 0; // dispatch the event MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, metaState); myView.dispatchTouchEvent(event);
笔记
- 其他元状态包括
KeyEvent.META_SHIFT_ON
等 - 感谢这个答案的例子。