根据用户触摸在其中心旋转画布 - Android

时间:2011-08-13 09:13:10

标签: android rotation touch android-canvas

我想根据用户的触摸在中心轴上循环旋转画布。

像旧电话拨号器一样。

我想根据中心

进行轮播

但是

现在它的旋转基于左上角。所以我只能看到旋转图像的1/4。

我试过如下

onDraw(Canvas canvas){
  canvas.save();
  // do my rotation
  canvas.rotate(rotation,0,0);
  canvas.drawBitmap( ((BitmapDrawable)d).getBitmap(),0,0,p );
  canvas.restore();
}

@Override
        public boolean onTouchEvent(MotionEvent e) {
                  float x = e.getX();
              float y = e.getY();
              updateRotation(x,y);
              mPreviousX = x;
              mPreviousY = y;
            invalidate();
        }

  private void updateRotation(float x, float y) {

          double r = Math.atan2(x - centerX, centerY - y);
            rotation = (int) Math.toDegrees(r);
        }

3 个答案:

答案 0 :(得分:2)

您需要将其添加到自定义视图方法

@Override     
public void onSizeChanged (int w, int h, int oldw, int oldh){ 
  super.onSizeChanged(w, h, oldw, oldh);         

  screenW = w;         
  screenH = h; 
}

此方法将为您提供画布大小,然后使用

  

canvas.rotate(rotation,screenW / 2,screenH / 2);

答案 1 :(得分:2)

通过旋转点旋转api:

canvas.rotate(rotation, 0, centerY);

答案 2 :(得分:2)

您可以使用,而不是旋转画布     X = 0;

x=x+50;
yourview.setRotation(x);

在触摸事件中使用此功能    x = x-50用于旋转后缀

我认为这会有所帮助