我有一个仪器,我想用来测试我的应用程序,但我似乎无法得到捏缩放以正确模拟。这是我目前的代码。它的要点是:将手指1和手指2向下推,将它们彼此靠近移动,然后将它们两者释放。
private void performZoomTest(int numUpdates) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
float x1 = 0;
float y1 = 0;
Display main = activity.getWindowManager().getDefaultDisplay();
float x2 = main.getWidth();
float y2 = main.getHeight();
float xstep = x2 / (2 * numUpdates);
float ystep = y2 / (2 * numUpdates);
int id1 = 0 << MotionEvent.ACTION_POINTER_ID_SHIFT;
int id2 = 1 << MotionEvent.ACTION_POINTER_ID_SHIFT;
MotionEvent event =
MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN + id1,
x1, y1, 0);
sendPointerSync(event);
event =
MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN + id2,
x2, y2, 0);
sendPointerSync(event);
waitForIdleSync();
for (int i = 0; i < numUpdates; i++) {
eventTime = SystemClock.uptimeMillis();
Log.i("",Integer.toString(i));
x1 += xstep;
y1 += ystep;
x2 -= xstep;
y2 -= ystep;
event =
MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_MOVE + id1,
x1, y1, 0);
Log.i("id1", Integer.toString(MotionEvent.ACTION_MOVE + id1));
sendPointerSync(event);
event =
MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_MOVE + id2,
x2, y2, 0);
Log.i("id1", Integer.toString(MotionEvent.ACTION_MOVE + id2));
sendPointerSync(event);
waitForIdleSync();
}
eventTime = SystemClock.uptimeMillis();
event =
MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_UP + id1,
x1, y1, 0);
sendPointerSync(event);
event =
MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_UP + id2,
x2, y2, 0);
sendPointerSync(event);
waitForIdleSync();
}
结果似乎是应用程序将这两个事件视为不同,并且不将它们注册为单个事件。有没有更好的方法呢?
答案 0 :(得分:1)
看看这里:https://stackoverflow.com/questions/522312/best-practices-for-unit-testing-android-apps
我认为使用标准Android框架无法进行多点触控单元测试。
答案 1 :(得分:0)
我不确定你到底做错了什么,但我认为那里有一些可能对你有帮助的文章。
This blog post from Google是关于处理多点触控的,甚至还展示了如何制作一个可以与单指滑动/滚动/拖动手势区分开的双指缩放(即缩放)手势。
以下是示例中的link to the code。
答案 2 :(得分:0)
我认为android API MotionEvent(ACTION_POINTER_DOWN,ACTION_MOVE, ACTION_POINTER_UP)可以解决多点触控问题。 但是。我不知道如何获取参数“numUpdates”。
答案 3 :(得分:0)
完全有可能,正如this post on stackoverflow所示。解决了我的设置问题。