三角形を回転させるための単純な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
場合は、開始オフセット角度を保存するだけでした。これは、形状が回転しなかったため、機能しませんでした。移動中にオフセット角度が再計算されていました。これが、この時点での最終的な方法です。)