Есть ли способ оживить setRotation или его следует заменить на RotateAnimation?
Я заставил некоторые кнопки вращаться в соответствии с ориентацией устройства с помощью setRotation(). Однако я заметил, что эти изменения не происходят гладко, и я хотел бы знать, есть ли простой способ заменить этот метод на RotateAnimation. Основная проблема заключается в том, что эти изменения ориентации не будут происходить под одним и тем же углом, например, анимация должна будет обрабатывать поворот от 0-90 и от 270-90. Я использую OrientationEventListener для определения ориентации угла. Есть идеи?
ОБНОВИТЬ:
OrientationEventListener orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) {
@Override
public void onOrientationChanged(int angle) {
float currentAngle = downloadStatus.getRotation();
if(angle > 260 && angle < 280) {
downloadStatus.animate().rotationBy(90 - currentAngle).setDuration(100).start();
} else if(angle > 80 && angle < 100) {
downloadStatus.animate().rotationBy(-90 - currentAngle).setDuration(100).start();
} else if(angle > 350 || angle < 10){
downloadStatus.animate().rotationBy(-currentAngle).setDuration(100).start();
} else if(angle > 170 && angle < 190){
downloadStatus.animate().rotationBy(180 - currentAngle).setDuration(100).start();
}
}
};
orientationEventListener.enable();
Далее я попытался заменить обратный угол портрета на следующие два:
while (MyButtonCurrentAngle==90) {
if (ButtonsAngle > 170 && ButtonsAngle < 190) {
MyButton.animate().rotationBy(90 - MyButtonCurrentAngle).setDuration(100).start();
}
}
while (MyButtonCurrentAngle==270) {
if (ButtonsAngle > 170 && ButtonsAngle < 190) {
MyButton.animate().rotationBy(-90 - MyButtonCurrentAngle).setDuration(100).start();
}
}
1 ответ
Решение
Попробуйте обновить мой предыдущий код до этого:
OrientationEventListener orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) {
@Override
public void onOrientationChanged(int angle) {
float currentAngle = downloadStatus.getRotation();
if(angle > 260 && angle < 280) {
downloadStatus.animate().rotationBy(90 - currentAngle).setDuration(100).start();
} else if(angle > 80 && angle < 100) {
downloadStatus.animate().rotationBy(-90 - currentAngle).setDuration(100).start();
} else if(angle > 350 || angle < 10){
downloadStatus.animate().rotationBy(-currentAngle).setDuration(100).start();
}
}
};
orientationEventListener.enable();