我正在创建一个简单的 OpenGL“应用程序”来旋转三角形。我希望在第一次触摸时保存触摸位置对应的角度。然后,在运动时,将形状旋转对应于当前位置减去第一次触摸角度的角度。
我的理解是第一步应该在 中完成,第二步应该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;
}
我的代码是错误的,还是模拟器的一些奇怪行为?(我目前无法访问安卓设备。)
(附录:我最初尝试完全实现上述内容,并带有一个MotionEvent.ACTION_MOVE
用于计算新角度和渲染的案例。该ACTION_DOWN
案例仅保存了起始偏移角度。这不起作用,因为形状没有旋转 - 因为偏移角度在移动过程中被重新计算——这就是我在这一点上的最终结果。)