Переход между 3 цветами фона

#android #xml #performance

#Android #xml #Производительность

Вопрос:

В настоящее время я использую следующее для перехода между 2 цветами фона:

background_Transition.xml

 <?xml version="1.0" encoding="UTF-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- TODO: HIGHER FPS, may require programmatic transitioning -->
    <item android:drawable="@drawable/background_start" />
    <item android:drawable="@drawable/background_end" />
</transition>
  

background_start.xml

 <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/colorPrimary" />
</shape>
  

background_end.xml

 <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/background_end" />
</shape>
  

MainActivity.java

 ...
// fade from start to end 
backgroundTransition.startTransition(DURATION);
// fade from current state to other state (used to fade from end to start)
backgroundTransition.reverseTransition(DURATION);
...
  

У меня есть 3 проблемы с этим решением.

  1. Как вы, возможно, заметили из TODO: комментария, частота кадров в секунду при этом переходе действительно низкая.
  2. Он может переключаться только между 2 состояниями; теперь я хочу переключиться между третьим.
  3. reverseTransition Метод Transition класса не работает идемпотентно, как startTransition это делает. Это меняет состояние перехода. Я не хочу иметь возможность идемпотентного перехода в любое из N состояний перехода.

Комментарии:

1. Вам нужно будет определить, что вы подразумеваете под 3 состояниями. Вы хотите, чтобы он переходил из A-> B-> C в одной анимации? Почему бы просто не заставить конец вашей первой анимации запустить вторую?

2. Нет. Я имею в виду один переход между 2 из n разных состояний. n выберите 2 различных возможных перехода

3. Вам нужно было бы сделать это в коде. Язык ресурсов анимации не допускает параметризованных анимаций

4. То есть мне придется вручную интерполировать цвета между ними, а затем установить интервал для настройки цвета фона?

5. Вероятно, вам могло бы сойти с рук написание класса анимации, который принимает параметры для начала и окончания при вызове метода, а затем запускает анимацию с этими значениями. Весь этот xml имел параллельную иерархию классов Java, которую вы можете подклассировать