Поворот холста по центру на основе прикосновения пользователя - Android - PullRequest
1 голос
/ 13 августа 2011

Я хочу вращать холст по кругу вокруг его центральной оси в зависимости от прикосновения пользователя.

Как старый номеронабиратель телефона.

Я хочу поворачивать по центру

но

Теперь его вращение основано на верхнем левом углу. Так что я могу видеть только 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 ]

2 голосов
/ 13 августа 2011

Передайте точку вращения, чтобы повернуть API:

canvas.rotate(rotation, 0, centerY);
2 голосов
/ 08 января 2013

Вместо вращения холста вы можете использовать х = 0;

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

используйте это на сенсорном событии и х = х-50 для вращающегося заднего слова

Я думаю, что это поможет

2 голосов
/ 13 августа 2011

Вам необходимо добавить это к вашим пользовательским методам просмотра

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

  screenW = w;         
  screenH = h; 
}

Этот метод даст вам размер холста, затем используйте

canvas.rotate (вращение, screenW / 2, screenH / 2);

...