2

AndroidでonTouch()イベントを使用して時計回りと反時計回りに画像を回転させる方法を知りたいです。また、onTouchListener を介して、時計回りまたは反時計回りの回転を調べる方法はありますか? ありがとう

4

2 に答える 2

0

基本的に、画像を独自のクラス内に配置できます。このクラスは、Viewを拡張し、次のようにOnClickListenerを実装します。

public class CustomImageView extends View implements OnClickListener{
    ...
}

CustomImageViewクラス内のonDrawメソッドをオーバーライドします。回転は、canvasオブジェクトを回転させることによってonDraw内に実装される場合があります。

3番目に、クリックイベントを取得し、ニーズに基づいてローテーションを実行するために、onClickを実装します。

基本的なレイアウトは次のようになります。

public class CustomImageView extends View implements OnClickListener{

     public void onClick (View v){

        // process click here

        // invalidate after click processing in order to redraw
        this.invalidate();
    }


    protected void onDraw(Canvas canvas) {

        // draw your image here, might be bitmap or other stuff

        // rotate canvas now, your logic on clockwise or 
        //  counterclockwise rotation goes here
        canvas.rotate(-90.0f, centerx, centery);

    }        

}
于 2012-04-22T09:13:35.470 に答える
0

この関数を使用して、MotionEvent オブジェクトの x 値と y 値から回転を取得できます。そこで、指定されたベクトル x とベクトル y からの追加の計算から方向を見つける必要があります。

  private int calculateAngle(float GETX, float GETY) {
    int direction = 1;

    double tx = (int) GETX - object_center.x;
    double ty = (int) GETY - object_center.y;
    double angleInDegrees = Math.atan2(ty, tx) * 180 / Math.PI;
    int area = 0;
    int ACTUAL_ANGLE = 270;

    if (angleInDegrees < 0 && angleInDegrees < -90) {
        // Need to add
        // 270+angle degrees
        // =================
        ACTUAL_ANGLE += (int) (180 + angleInDegrees) * direction;
    } else if (angleInDegrees < 0 && angleInDegrees > -90) {
        // Need to add
        //  90+angle degrees
        // =================
        ACTUAL_ANGLE = (int) (90 + angleInDegrees);
    } else if (angleInDegrees > 0)
        ACTUAL_ANGLE = 90 + (int) angleInDegrees;
    return ACTUAL_ANGLE;
}
于 2013-09-01T15:36:55.143 に答える