Добавить анимацию во время выполнения

Я хочу анимировать мой AnimatedVectorDrawable во время выполнения без использования файлов .xml. На самом деле я использую файлы .xml так же, как показывают образцы документации:

AnimatedVectorDrawable

Итак, у меня есть vector_drawable.xml содержит <vector> с вложенными <group> и <path>, которые определяют форму.

Для этого вектора я animated_vector_drawable.xml содержит <animated-vector> с android:animation, который соответствует <target>.

Последний шаг определяет файл анимации rotation.xml с помощью <objectAnimator>, который используется animated_vector_drawable.xml

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

  • Я не могу включить готовый и подготовленный <vector> из одного файла .xml в другой (какой-то тэг <include>), поэтому мне нужно скопировать тот же код в другие файлы. Это очень раздражает.

  • Если я хочу использовать ту же анимацию для нескольких элементов <target>, но каждая анимация должна иметь f.e. (alpha, rotation, interpolator...), я должен создать новый .xml файл содержит <objectAnimator> с измененным значением одного свойства вместо того, чтобы использовать тот же самый, один файл с измененным стоимость имущества. Это также раздражает.

  • Я обнаружил, что могу использовать ObjectAnimator и устанавливать alpha и fillColor для AnimatedVectorDrawable, но есть проблема, когда я хочу изменить его translateX, translateY, rotation или любые другие свойства. Есть ли способ сделать это без .xml. Я просто хочу иметь доступ к <group>

Ответ 1

Конструктор, который вы использовали, создает анимацию с абсолютными значениями (пикселями).

TranslateAnimation in = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 1.0f,
Animation.RELATIVE_TO_SELF, 0.0f, 0, 0.0f, 0, 0.0f);

Попробуйте использовать Animation.RELATIVE_TO_PARENT в соответствии с вашими потребностями.