嗨,我陷入了同样的境地。我正在使用OpenGL ES 2.0开发一个应用程序,我需要测试代码的多点触控部分。下面是我的onTouchEvent。如果pointerCount为1,那么我正在旋转,如果用户使用两个手指进行捏合动作,我会放大模型。
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
touchedX = event.getX();
touchedY = event.getY();
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (event.getPointerCount() == 1) {
activityRenderer.xAngle += (touchedX - event.getX()) / 2f;
activityRenderer.yAngle += (touchedY - event.getY()) / 2f;
touchedX = event.getX();
touchedY = event.getY();
} else if (event.getPointerCount() == 2) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
float newDistance = FloatMath.sqrt(x * x + y * y);
if (newDistance > oldDistance)
activityRenderer.zoom += 0.05;
else
activityRenderer.zoom -= 0.05;
oldDistance = newDistance;
}
}
return true;
}
以下是测试用例:
public void testZoomIn() {
mActivity = getActivity();
mActivity.startActivity(mActivity.getIntent());
Log.w("INSTRUMENTATION", (getInstrumentation() == null)?"yes":"no");
generateZoomGesture(getInstrumentation(), 1000, true, new Point(1, 2),
new Point(20, 45), new Point(3, 4), new Point(25, 55), 2000);
assertTrue(true);
}
我对显示here的generateZoomGesture使用了相同的方法。测试类扩展了ActivityInstrumentationTestCase2。我使用assertTrue只是为了看看我的代码是否被覆盖。我将不得不改变断言声明。但这里的问题是测试不会进入else if(event.getPointerCount()== 2)阻止。你能帮我找出我错在哪里吗?
答案 0 :(得分:0)
你需要尝试切换机箱,编写多点触控需要使用MotionEvent.ACTION_MASK,但不是。 PS。我是android的新手,我希望这个解释是对的。
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
Log.d(TAG, "down");
case MotionEvent.ACTION_POINTER_DOWN:
Log.d(TAG, "pointer down");
case MotionEvent.ACTION_MOVE:
int pointerCount=e.getPointerCount();
Log.d(TAG, "move");
if(event.getPointerCount() == 2){
Log.d(TAG, "c =" + event.getPointerCount());
}
}
}