【问题标题】:Android: How to create a MotionEvent?Android:如何创建 MotionEvent?
【发布时间】:2011-05-03 08:40:03
【问题描述】:

MotionEvent 没有构造函数,我想在我的单元测试中手动创建一个 MotionEvent,那么如何获得呢?谢谢。

【问题讨论】:

    标签: android events


    【解决方案1】:

    您应该使用MotionEvent 类的静态obtain 方法之一来创建新事件。

    最简单的方法(除了从现有事件中包装一个新事件)是:

    static public MotionEvent obtain(long downTime, long eventTime, int action,
            float x, float y, int metaState) {
    

    API 文档

    新建一个MotionEvent,填写一个 基本运动值的子集。 此处未指定的是:设备 id(始终为 0)、压力和大小 (总是 1),x 和 y 精度(总是 1) 和 edgeFlags(始终为 0)。

    参数

    • downTime 用户最初按下开始 位置事件流。这 必须从 SystemClock.uptimeMillis()。
    • eventTime 时间(以毫秒为单位) 生成了此特定事件。 这必须从 SystemClock.uptimeMillis()
    • action那种动作 执行——其中之一 ACTION_DOWN, ACTION_MOVE, ACTION_UP,或ACTION_CANCEL
    • x此事件的X坐标。
    • y此事件的 Y 坐标。
    • metaState任何元的状态/ 有效的修饰键 事件的生成时间。

    Link to API Docs

    【讨论】:

    • 当你完成它们后,你应该总是在你 obtain 的 MotionEvents 上调用 recycle,对吗? (可能对单元测试并不重要。)我猜它们存储在对象池中,获取和回收就像 new 和 delete。
    • 有人可以确认绝对需要回收吗?从 SDK 文档中没有看到这个。
    • @xwz7611 不需要(基本上,MotionEvents 在后台有一个原始对象缓存,recycle() 告诉事件将自己存储在缓存中以供重用),但是如果如果您不使用它,您可能会获得额外的开销,因为每次您获得MotionEvent 时,VM 都必须分配和构造一个新对象。 (有一点内存权衡,因为回收的事件仍然占用空间,但只要你不一次创建一大堆 MotionEvents 并且定期调度它们,那不应该是问题)。 ListView rows 自动执行相同的操作。
    • 如何设置工具类型来模拟鼠标光标?
    【解决方案2】:

    补充答案

    这是一个说明接受答案的示例:

    // 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);
    

    注意事项

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      相关资源
      最近更新 更多