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_DOWNACTION_MOVEACTION_UPACTION_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
  • 感谢这个答案的例子。