Android 动作向下,表现得像动作移动

Android 动作向下,表现得像动作移动,android,touch-event,motionevent,Android,Touch Event,Motionevent,我正在创建一个简单的OpenGL“应用程序”来旋转三角形。我希望在第一次触摸时保存触摸位置对应的角度。然后,在运动时,将形状旋转与当前位置相对应的角度减去第一次触摸的角度 我的理解是,第一步应该在MotionEvent.ACTION\u DOWN中完成,第二步应该在MotionEvent.ACTION\u MOVE中完成。然而,在这项动议中,似乎有人要求采取行动。也就是说,下面的代码会在拖动手指时使形状旋转(我知道它只会旋转到初始触摸的位置): 是我的代码错了,还是这是模拟器的一些奇怪行为?(我

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

我的理解是,第一步应该在
MotionEvent.ACTION\u DOWN
中完成,第二步应该在
MotionEvent.ACTION\u MOVE
中完成。然而,在这项动议中,似乎有人要求采取行动。也就是说,下面的代码会在拖动手指时使形状旋转(我知道它只会旋转到初始触摸的位置):

是我的代码错了,还是这是模拟器的一些奇怪行为?(我目前无法访问android设备。)


(附录:我最初尝试通过
MotionEvent.ACTION\u MOVE
案例来完全实现上述功能,用于计算新角度和渲染。
ACTION\u DOWN
案例仅保存起始偏移角度。这不起作用,因为形状没有旋转-因为在移动过程中重新计算偏移角度t-这就是我在这一点上结束的原因。)

可能是您忘记在开关/案例中添加break语句。因此,一旦动作完成,动作将立即在需要使用getActionMasked()而不是getAction()之后执行。请参阅WarrenFaith的评论。

我只看到了动作。提到的动作在哪里?你实际上只做了动作中的某件事,而动作中的任何动作(除了保存坐标)我以前都没有(见附录)。我的问题是,在触摸拖动提升运动期间,动作\u DOWN被连续使用,而在第一次触摸期间(我想?)应该只使用一次。您是否尝试过
getActionMasked()
?执行所有动作\u UP/DOWN/MOVE并记录它们,以查看是否正确调用了MOVE和/或UP。好的,那么使用
if(例如getActionMasked())==MotionEvent.ACTION\u MOVE{rotate wrt.offset}如果(e.getActionMasked()==MotionEvent.ACTION\u DOWN){set the offset}
工作正常。这与使用
e.getAction()
开关
/
case
有什么不同(谢谢!)ActionMasked对多点触控很重要。你也可以使用switch case。我确实试过这个,但没有用。解决方案如Warren的评论所示。谢谢。
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;
}