MotionEvent没有构造函数,我想在我的单元测试中手动创建一个MotionEvent,那么如何获得它呢?谢谢。
发布于 2011-05-03 16:49:19
您应该使用MotionEvent类的某个静态obtain方法来创建新事件。
最简单的方法(除了从现有事件包装新事件之外)是:
static public MotionEvent obtain(long downTime, long eventTime, int action,
float x, float y, int metaState) {接口文档
创建一个新的MotionEvent,填充基本运动值的子集。此处未指定的参数包括:设备id (始终为0)、压力和尺寸(始终为1)、x和y精度(始终为1)以及edgeFlags (始终为0)。
参数
downTime用户最初按下以启动位置事件流的时间(毫秒)。必须从SystemClock.uptimeMillis().eventTime获取生成此特定事件的时间(以毫秒为单位)。这必须从正在执行的操作类型中获取-- ACTION_CANCEL.x event.y的X坐标event.metaState ACTION_DOWN的Y坐标生成事件时生效的任何元/修饰符键的状态。ACTION_MOVE ACTION_UP。Link to API Docs
发布于 2017-10-07 16:09:57
补充答案
以下是一个示例,说明了公认的答案:
// 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等。https://stackoverflow.com/questions/5867059
复制相似问题