У меня есть инструментальные средства, которые я хочу использовать для тестирования своего приложения, но мне кажется, что я не могу получить масштабирование пинч для правильной симуляции. Вот мой текущий код. Суть этого в следующем: опустите вниз оба пальца 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();
}
В результате получается, что приложение обрабатывает два события как отдельные и не регистрирует их как одно событие. Есть ли лучший способ сделать это?