0

三角形を回転させるための単純なOpenGL「アプリ」を作成しています。最初のタッチで、タッチ位置が対応する角度を保存したいと思います。次に、モーション時に、現在の位置から最初のタッチの角度を引いた角度に対応する角度でシェイプを回転させます。

MotionEvent.ACTION_DOWN最初のステップはで、2番目のステップはで行う必要があることを理解しました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場合は、開始オフセット角度を保存するだけでした。これは、形状が回転しなかったため、機能しませんでした。移動中にオフセット角度が再計算されていました。これが、この時点での最終的な方法です。)

4

2 に答える 2

0

getAction() ではなく getActionMasked() を使用する必要がありました。WarrenFaith からのコメントを参照してください。

于 2013-02-02T15:54:20.853 に答える
0

switch/case に break ステートメントを入れるのを忘れた可能性があります。したがって、ACTION_MOVE が完了すると、直後に ACTION_DOWN が続きます。

于 2013-02-02T15:47:18.880 に答える