Есть ли способ анимировать 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();
person Xiaoyu Yu    schedule 02.11.2015
comment
Ты самый лучший! В очередной раз благодарим за помощь. :) - person Lekstadt; 02.11.2015
comment
Привет, у меня есть небольшое сомнение. Я добавил обратный угол портрета и его анимацию, но он сильно вращается. Сначала я попробовал 180, и, поскольку нет ничего похожего на -0, мне было интересно, есть ли что-то, что я упускаю. Я обновил свой вопрос. - person Lekstadt; 02.11.2015