【问题标题】:Android testing, how to simulate multitouch (zoom in/out) using instruments?Android测试,如何使用仪器模拟多点触控(放大/缩小)?
【发布时间】:2011-07-08 02:52:31
【问题描述】:

我可以在我的测试中简单地模拟单点触控——点击、滑动、按住等,但完全坚持使用 Android 2.2 在 HTС Desire 上模拟多点触控。

您能否建议,我如何重现事件链来测试多点触控?

我认为我需要使用一些棘手的 MotionEvent,例如 MASK 或类似的东西,但不知道该怎么做。

我在这里找到了复制缩放事件的转储: http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch-events/1775?tag=mantle_skin;content

 1. event ACTION_DOWN[#0(pid 0)=135,179]
 2. event ACTION_MOVE[#0(pid 0)=135,184]
 3. event ACTION_MOVE[#0(pid 0)=144,205]
 4. event ACTION_MOVE[#0(pid 0)=152,227]
 5. event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=153,230;#1(pid 1)=380,538]
 6. event ACTION_MOVE[#0(pid 0)=153,231;#1(pid 1)=380,538]
 7. event ACTION_MOVE[#0(pid 0)=155,236;#1(pid 1)=364,512]
 8. event ACTION_MOVE[#0(pid 0)=157,240;#1(pid 1)=350,498]
 9. event ACTION_MOVE[#0(pid 0)=158,245;#1(pid 1)=343,494]
 10. event ACTION_POINTER_UP(pid 0)[#0(pid 0)=158,247;#1(pid 1)=336,484]
 11. event ACTION_MOVE[#0(pid 1)=334,481]
 12. event ACTION_MOVE[#0(pid 1)=328,472]
 13. event ACTION_UP[#0(pid 1)=327,471]

这是我的问题:

  1. 事件 ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=153,230;#1(pid 1)=380,538]
  2. 事件 ACTION_MOVE[#0**(pid 0)=153,231**;#1**(pid 1)=380,538**]

如何生成具有 4 个坐标(pid 0 x0 y0 和 pid 1 x1 y1)的事件?

看来我需要找到如何使用以下事件的方法:

public static MotionEvent 获取 (long downTime, long eventTime, int action, int pointers, int[] pointerIds, PointerCoords[] pointerCoords, int metaState, float xPrecision, float yPrecision, int deviceId, int edgeFlags, int source, int flags )

感谢Dan的回复,这个逻辑我试过了,但是添加坐标还是遇到问题:

MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 135, 179, 0);
            inst.sendPointerSync(event);
//                eventTime+=100;
            event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, 135, 184, 0);
            inst.sendPointerSync(event);
//                eventTime+=100;

            int pointerToMove = 1; // pointer IDs are zero-based
            event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) +  MotionEvent.ACTION_POINTER_DOWN, 138, 189, 0);
            inst.sendPointerSync(event);


            event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) + MotionEvent.ACTION_MOVE, 158, 220, 0);
            inst.sendPointerSync(event);

 //                eventTime+=100;
            event = MotionEvent.obtain(downTime, eventTime, (2 * 256) + MotionEvent.ACTION_MOVE, 138, 180, 0);
            inst.sendPointerSync(event);
 //                eventTime+=100;
            event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE,  135, 184, 0);

这些事件序列被我的测试存根捕获并转储如下:

(14368): event ACTION_DOWN[#0(pid 0)=135,179]
(14368): event ACTION_MOVE[#0(pid 0)=135,184]
(14368): event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=138,189]
(14368): event ACTION_MOVE[#0(pid 0)=158,220]
(14368): event ACTION_MOVE[#0(pid 0)=138,180]
(14368): event ACTION_MOVE[#0(pid 0)=135,184]

在这里你可以看到, (2 * 256) + MotionEvent.ACTION_MOVE 不会更改事件的指针 ID :( 和 指针移动

我的问题是我无法为指针 0 和指针 1 生成 2 对坐标:

(14368): event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=138,189]

在这里您可以看到,使用您的逻辑我已将 pid1 添加到事件中,但它仍然没有坐标,因为 x 和 y 与 pid 0 相关联..

提前谢谢你。

雅虎

仍然不知道如何实现它,有人发送过多点触控事件吗?

【问题讨论】:

  • 这个问题你解决了吗?

标签: android testing instruments multi-touch


【解决方案1】:

我相信你只需要在传递给 MotionEvent.obtain 的 'action' 参数中指明指针索引。具体来说,动作的高 8 位是指针索引,低 8 位是动作(例如 MotionEvent.ACTION_MOVE)。所以,如果你想移动第二个指针,这应该可以工作:

int pointerToMove = 1; // pointer IDs are zero-based
event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) + MotionEvent.ACTION_MOVE, x0, y0, 0);
inst.sendPointerSync(event);

-丹

【讨论】:

  • 感谢您的回复,现在我知道如何选择指针 id,使用您的方法,但是在这种情况下,pId 出现没有坐标:您可以看到转储事件只有一对坐标:事件ACTION_POINTER_DOWN(pid 2)[#0(pid 0)=138,189] 比较,事件的原始转储,当手指触摸时:# event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=153,230;#1(pid 1 )=380,538]
【解决方案2】:

我想this 可以帮助你..

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多