ACTION_DOWN的行为类似于ACTION_MOVE

时间:2013-02-02 15:06:48

标签: android ontouchevent motionevent

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

我的理解是,第一步应该在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情况只保存起始偏移角度。这不是工作,因为形状没有旋转 - 因为在移动过程中重新计算偏移角度 - 这就是我此时的结果。)

2 个答案:

答案 0 :(得分:0)

可能是你忘记在你的交换机/案例中放置一个break语句。因此,一旦ACTION_MOVE完成,在

之后立即跟随ACTION_DOWN

答案 1 :(得分:0)

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