我正在创建一个简单的OpenGL“应用程序”来旋转三角形。我希望在第一次触摸时保存触摸位置对应的角度。然后,在运动时,将形状旋转对应于当前位置的角度减去第一次触摸的角度。ACTION_DOWN的行为像ACTION_MOVE
这是我的理解,第一步应该在MotionEvent.ACTION_DOWN
,第二步在MotionEvent.ACTION_MOVE
。但是,在运动过程中似乎正在调用ACTION_DOWN。也就是说,下面的代码将导致形状旋转的手指拖动(我理解,这只会旋转到初始触摸的位置):
private double mTheta;
@Override
public boolean onTouchEvent(MotionEvent e) {
super.onTouchEvent(e);
float x = e.getX();
float y = e.getY();
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
x -= getWidth()/2;
y -= getHeight()/2;
mTheta = Math.atan2(-x,-y) * 180.0f/Math.PI;
GL20Renderer.mAngle = (float) mTheta;
requestRender();
}
return true;
}
是我的代码错了,或者这模拟器的怪异行为? (我目前没有访问Android设备。)
(附录:我原来试图完全实现上述,用MotionEvent.ACTION_MOVE
的情况来计算新的角度和渲染。ACTION_DOWN
的情况只是保存起始这是行不通的,因为形状没有旋转 - 因为偏移角度在移动过程中被重新计算 - 这是我在这一点上的结果。)
我只看到ACTION_DOWN。提到的ACTION_MOVE在哪里?你实际上只在ACTION_DOWN中做了一些事情,ACTION_MOVE – WarrenFaith
我曾经拥有它(见附录),但没有任何东西(除了保存这些坐标)。我的问题是,ACTION_DOWN正在连续使用的过程中,它应该只是一次,在第一次触摸(我认为?) – Sam
您尝试过'getActionMasked()'吗?执行所有ACTION_UP/DOWN/MOVE并记录它们以查看MOVE和/或UP是否被正确调用。 – WarrenFaith