Android:如何创建MotionEvent?
MotionEvent没有获得构造函数,我想在单元测试中手动创建一个MotionEvent,那么如何获得它呢?谢谢。您应该使用Android:如何创建MotionEvent?,android,events,Android,Events,MotionEvent没有获得构造函数,我想在单元测试中手动创建一个MotionEvent,那么如何获得它呢?谢谢。您应该使用MotionEvent类的一个静态get方法来创建新事件 最简单的方法(除了从现有事件包装新事件外)是: API文档: 创建一个新的MotionEvent,填充 基本运动值的子集。 此处未指定的是:设备 id(始终为0)、压力和尺寸 (始终为1)、x和y精度(始终为 1) ,和边间隙(始终为0) 参数: 停机时间停机时间 用户最初按下启动按钮 一连串的位置事件。这 必须
MotionEvent
类的一个静态get
方法来创建新事件
最简单的方法(除了从现有事件包装新事件外)是:
API文档:创建一个新的MotionEvent,填充 基本运动值的子集。 此处未指定的是:设备 id(始终为0)、压力和尺寸 (始终为1)、x和y精度(始终为 1) ,和边间隙(始终为0) 参数:
停机时间 用户最初按下启动按钮 一连串的位置事件。这 必须从 SystemClock.uptimeMillis()停机时间
此特定事件已生成。 这必须从以下地址获得:eventTime
SystemClock.uptimeMillis()
正在执行的动作类型 执行--其中一个动作
,动作下移
,动作下移
,或操作启动
操作取消
此事件的x坐标x
此事件的y坐标y
任何元状态的状态/ 已生效的修改器关键点 当事件生成时元状态
// 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\u SHIFT\u ON
- 感谢您对示例的帮助
回收来处理获取的运动事件,对吗?(可能对单元测试不重要。)我猜它们存储在一个对象池中,获取和回收就像新建和删除一样。有人能确认回收是绝对必要的吗?未从SDK文档中看到此内容。@xwz7611不需要它(基本上,MotionEvent
s在后台有一个基本对象缓存,并且recycle()
告诉事件将自身存储在缓存中以供重用),但是如果不使用它,可能会增加额外的开销,因为每次获得MotionEvent
时,虚拟机都必须分配和构造一个新对象。(有一点内存折衷,因为回收的事件仍然会占用空间,但只要您不是一次创建一大堆MotionEvent
s,并且定期发送它们,这应该不会有问题)<代码>列表视图
行自动执行相同操作。如何将工具类型设置为假鼠标光标?
// 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);