2011-07-28 11 views
2

ACTION_DOWNで画像表示を回転できます。画像表示回転on ACTION_MOVE

ですが、ACTION_MOVEには対応していません& ACTION_UP。

public class RotateImage extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Rotate rotate; 
     rotate = new Rotate(this); 

     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(rotate); 
    } 
} 

public class Rotate extends ImageView { 
    Paint paint; 
    int direction = 0; 
    private float x; 
    private float y; 
    int degree = 0; 
    float a, b, c; 
    private float centerX ; 
    private float centerY ; 
    private float newX ; 
    private float newY ; 

    public Rotate(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
     paint = new Paint(); 
     paint.setColor(Color.WHITE); 
     paint.setStrokeWidth(2); 
     paint.setStyle(Style.STROKE); 

     this.setImageResource(R.drawable.direction1); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     int height = this.getHeight(); 
     int width = this.getWidth(); 
     centerX = width/2; 
     centerY = height/2; 
     canvas.rotate(direction, width/2, height/2); 
     super.onDraw(canvas); 

    } 

    public void setDirection(int direction) { 
     this.direction = direction; 
     this.invalidate(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("now i'm in BEFORE calling MotionEvent.ACTION_MOVE "); 

     if (event.getAction() == MotionEvent.ACTION_DOWN) { 

      x = event.getX(); 
      y = event.getY(); 

      newX = centerX-x; 
      newY = centerY-y; 

      updateRotation(newX, newY); 

      } 
      else if (event.getAction() == MotionEvent.ACTION_MOVE) { 

       x = event.getX(); 
       y = event.getY(); 

       newX = centerX-x; 
       newY = centerY-y; 

       updateRotation(newX, newY); 

       } 
      else if (event.getAction() == MotionEvent.ACTION_UP) { 

        x = event.getX(); 
        y = event.getY(); 

        newX = centerX-x; 
        newY = centerY-y; 

        updateRotation(newX, newY); 

        } 
     return super.onTouchEvent(event); 
    } 

    private void updateRotation(float newX2, float newY2) { 
     // TODO Auto-generated method stub 

     degree = (int)Math.toDegrees(Math.atan2(newY, newX))-90; 

     setDirection(degree); 
    } 

} 

任意の提案は、あなたのonTouchEvent方法で

答えて

7

戻りの代わりsuper.onTouchEvent(event)を充当されるだろう。これにより、タッチイベントを処理していることをOSに通知し、さらにタッチイベント(例:MotionEvent.ACTION_MOVE)を提供できるようにします。

+0

ありがとうございます。それはうまく動作します – Sharana

+1

素晴らしいです。答えを受け入れる? –

+1

ジェスチャの例を使用してビューを移動して回転させることはできますが、オブジェクトビューは画面外に移動しますか? –