Программно запустить Animatable (AnimatedVectorDrawable) с определенным смещением - PullRequest
0 голосов
/ 10 июля 2020

Есть ли способ программно запустить AnimatedVectorDrawable с определенным смещением?

Контекст:

Я разрабатываю для API 19 и выше, поэтому Я использую Android Jetpack. У меня есть собственный View с анимируемым «индикатором» (<selector> с векторными изображениями).

Сейчас я запускаю анимацию следующим образом:

ImageView indicator = findViewById(R.id.indicator);
indicatorDrawable = indicator.getDrawable().getCurrent();
if(indicatorDrawable instanceof Animatable) {
    ((Animatable) indicatorDrawable).start();
}

И это аниматор, связанный с моим "индикатором" в xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:duration="500"
        android:propertyName="fillAlpha"
        android:valueFrom="0.5"
        android:valueTo="0"
        android:repeatMode="reverse"
        android:repeatCount="infinite"/>
</set>

Все это работает нормально. Однако у меня есть несколько экземпляров моих пользовательских View в Activity, и мне нужно синхронизировать их «индикаторные» анимации (которые могут индивидуально включаться или выключаться в любое время).

Я не буду беспокоить вас подробностями, но в настоящее время у меня есть приемлемое решение, которое в основном использует поле static миллисекунды в моем пользовательском View. Это работает, но заставляет анимацию останавливаться на некоторое время, если они пытаются наверстать упущенное.

Я бы лучше сразу начал анимацию с определенным смещением, чтобы избежать этой остановки.

Я бы подумал, что я должен каким-то образом получить доступ к вышеупомянутому ObjectAnimator, связанному с моим Animatable, и установить его startOffset, но я не могу понять, как.

Итак, могу ли я каким-то образом получить доступ к ObjectAnimator и индивидуально установить его startOffset для каждого индивидуального Animatable программно?

1 Ответ

0 голосов
/ 10 июля 2020

После некоторого дополнительного поиска в сети я нашел библиотеку Kyr ie от Alex Lockwood , которая предлагает следующее о стандартной реализации VectorDrawable и AnimatedVectorDrawable:

Однако эти два класса имеют три основных ограничения:

  1. Их нельзя приостанавливать, возобновлять или искать.

... и решает эти проблемы.

Затем, после еще нескольких поисков, я обнаружил новый пакет Android Jetpack, androidx.vectordrawable , который решает эти проблемы а также, в частности: androidx.vectordrawable: vectordrawable-seekable: 1.0.0 .

Следовательно, похоже, что просто невозможно найти конкретное смещение с реализацией по умолчанию AnimatedVectorDrawable.

Итак, теперь мне просто нужно выяснить, как работает этот новый пакет Android Jetpack, и посмотреть, стоит ли он дополнительных накладных расходов.

...