В настоящее время я использую следующее для переключения между 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 проблемы с этим решением.
- Как вы, возможно, заметили из комментария
TODO:
, FPS действительно низок при этом переходе. - Он может передавать только между 2состояния;Теперь я хочу переключиться между третьим.
- Метод
reverseTransition
класса Transition
не идемпотентно работает, как startTransition
.Это переворачивает состояние перехода.Я не хочу иметь возможность идемпотентного перехода в одно из N состояний перехода.