Я пытаюсь повернуть ImageButton на 180 градусов, чтобы он соответствовал обратной портретной ориентации. Когда я сделал это так же, как другие изменения ориентации, результат был идеальным, но не анимация.
public void onOrientationChanged(int DeviceAngle) {
float MyButtonCurrentAngle = MyButton.getRotation(); //Gets portrait rotation (0)
if(DeviceAngle > 350 || DeviceAngle < 10) { //Portrait
MyButton.animate().rotationBy(- MyButtonCurrentAngle).setDuration(100).start();
} else if(DeviceAngle > 80 && DeviceAngle < 100) { //Reverse Landscape
MyButton.animate().rotationBy(-90 - MyButtonCurrentAngle ).setDuration(100).start();
} else if(DeviceAngle > 170 && DeviceAngle < 190) { //Reverse Portrait
MyButton.animate().rotationBy(180 - MyButtonCurrentAngle).setDuration(100).start();
} else if(DeviceAngle > 260 && DeviceAngle < 280) { //Landscape
MyButton.animate().rotationBy(90 - MyButtonCurrentAngle ).setDuration(100).start();
}
Я думал, что это происходит, потому что поплавок MyButtonCurrentAngle получает значение угла поворота MyButton (0 или без поворота) из DeviceAngle между 350 и 10 (0 или 360, портретная ориентация) и использует его в качестве эталона.
Хотя я все еще сомневаюсь, я отбросил предыдущий случай. Поплавок, казалось, хорошо работал с другими ориентациями, и я думаю, что проблема заключается в анимации для ориентации «Обратный портрет». Кнопку нужно поворачивать не на 180, а либо на 90, либо на -90 градусов. Это связано с тем, что вы не можете повернуть устройство из книжной ориентации в обратную, не выбрав альбомную ориентацию. (Невозможно напрямую повернуть портрет в перевернутый портрет).
После многих безуспешных попыток я пришел к выводу, что я не могу использовать значение угла, полученное MyButton, после того, как кнопка была повернута и обнаружена ориентация: альбомная или обратная альбомная. Я думал о создании еще одного плавающего элемента, чтобы получить значение угла MyButton для обратного портрета, но ориентация этого действия установлена на Портрет, поэтому это не имеет смысла.
Поэтому мне нужно получить угол поворота MyButton после того, как он был повернут с плавающей запятой, используя эти значения как условие цикла, и в зависимости от результата повернуть его на 90 градусов или -90 градусов в двух разных анимациях. Это был мой последний подход к проблеме:
while (MyButtonCurrentAngle==90) {
if (DeviceAngle > 170 && DeviceAngle < 190) {
MyButton.animate().rotationBy(90 - MyButtonCurrentAngle).setDuration(100).start();
}
}
while (MyButtonCurrentAngle==270) {
if (DeviceAngle > 170 && DeviceAngle < 190) {
MyButton.animate().rotationBy(-90 - MyButtonCurrentAngle).setDuration(100).start();
}
}
По сути, это обрабатывает ориентацию устройства от альбомной и обратной альбомной до обратной портретной. Это не запускало никакой анимации, поэтому значение угла плавания MyButtonCurrentAngle никогда не менялось или не могло быть обнаружено? Почему операторы if не могут его прочитать? Я не знаю, и я хотел бы знать, что я делаю неправильно. Заранее спасибо.