2016-11-08 1 views
0

Я пытаюсь повернуть изображение на 90 градусов, но каждый раз, когда этот метод называется представлением, он перескакивает вперед на 90 градусов, а затем поворачивает дополнительные 90 градусов.Android View Rotation Animation и Set Rotation не работают по назначению

Я пробовал играть с цифрами без успеха. Кажется, что-то о том, как работает этот код, который я не понимаю.

Может кто-нибудь объяснить, что происходит в данный момент, и что нужно изменить, чтобы получить ожидаемый результат?

public void RotatePoint(float toDegrees) { 
    final RotateAnimation rotate = 
     new RotateAnimation(pt.getRotation(), pt.getRotation() + toDegrees, 
      RotateAnimation.RELATIVE_TO_SELF, 0.5f, 
      RotateAnimation.RELATIVE_TO_SELF, 0.5f); 
    rotate.setDuration(1000); 
    rotate.setFillEnabled(true); 
    rotate.setFillAfter(true); 
    pt.startAnimation(rotate); 
    pt.setRotation(pt.getRotation()+toDegrees); 
    if (pt.getRotation() == 360) { 
     pt.setRotation(0); 
    } 
} 
+0

Corrected следующую строку pt.setRotation (pt.getRotation (+) toDegrees); Используется для чтения +90 вместо + toDegrees, В этом случае может быть важно, чтобы toDegrees всегда было равно 90. –

ответ

0

принимать глобальные переменные-float rotation = 0, fromRotation = 0;

и OnClick

  fromRotation=rotation; 
      rotation = rotation + 90; 
      RotatePoint(rotation); 

и RotatePoint (поплавок) toDegrees

RotateAnimation rotate = new RotateAnimation(fromRotation, toDegrees, 
      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
    rotate.setDuration(1000); 


    rotate.setFillAfter(true); 
    pt.startAnimation(rotate); 
+0

Это частичное решение. В моем приложении я проверяю, в каком направлении находится точка, но с этим вращение постоянно увеличивается навсегда. Я снова включил If (rotation == 360) {rotation = 0;}, и это работает после первого вращения, но при первом повороте каждой точки все равно перемещается случайным образом. Я считаю, что это связано с тем, что каждая точка начинается со случайного вращения (0, 90, 180 или 270) Кажется, что точкам задано случайное вращение (визуально), но это вращение чем-то отличается от вращения, хранящегося в его переменных. Также спасибо, что нашли время, чтобы ответить на мои вопросы. –

+0

вместо этого измените поворот и от вращения, когда –

+0

if (fromRotation == 270) {fromRotation = 0; rotation = 0;} –