0

我正在创建一个简单的 OpenGL“应用程序”来旋转三角形。我希望在第一次触摸时保存触摸位置对应的角度。然后,在运动时,将形状旋转对应于当前位置减去第一次触摸角度的角度。

我的理解是第一步应该在 中完成,第二步应该MotionEvent.ACTION_DOWNMotionEvent.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案例仅保存了起始偏移角度。这不起作用,因为形状没有旋转 - 因为偏移角度在移动过程中被重新计算——这就是我在这一点上的最终结果。)

4

2 回答 2

0

可能是你忘记在你的 switch/case 中放置一个 break 语句。所以一旦 ACTION_MOVE 完成,ACTION_DOWN 紧随其后

于 2013-02-02T15:47:18.880 回答
0

需要使用 getActionMasked() 而不是 getAction()。请参阅 WarrenFaith 的评论。

于 2013-02-02T15:54:20.853 回答