Динамически заменить изображение в анимации Lottie во время выполнения - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть супер простая анимация After Effects квадрата, движущегося вокруг (форма AE).Я экспортирую анимацию как .json, используя Bodymovin, и добавляю файл json, используя Lottie, в мой проект.Все идет нормально.

Проблема начинается здесь -> во время выполнения, замените этот "квадрат" изображением, которое у меня есть в моем проекте.Поскольку это изображение может измениться, я не могу добавить его статически в свою анимацию AE, поэтому нужно динамически добавлять его во время выполнения.Там почти нет информации о том, как это сделать в Android?

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

LottieAnimationView расширяет ImageView.Другими словами, LottieAnimationView также является ImageView.

Таким образом, вы можете установить изображение на LottieAnimationView так же, как вы устанавливаете изображение на ImageView

Например:

if (isAnimated) {
    mLottieView.setAnimation("<json file name from asset folder>");
} else {
    mLottieView.setImageResource(R.drawable.square_image);
}

Это всего лишь пример того, как вы можете использовать одно и то же представление для воспроизведения анимации (файл json), просто отображая изображение как любой ImageView ..

0 голосов
/ 06 февраля 2019

Удалось сделать это: проблема заключалась в том, что моя анимация After Effects имела векторную форму, и я пытался заменить это.После того, как я изменил исходную анимацию, чтобы вместо нее иметь .png, я мог заменить изображение во время выполнения.Работало просто отлично.

// First I converted the png I wanted to see at runtime to a bitmap:

Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), R.drawable.imageBlah);

// I used the lambda: 

lottieAnimationView.setImageAssetDelegate( lottieImageAsset -> bitmapImage);

Это сработало для ОДНОГО образа, теперь я собираюсь посмотреть, как заменить несколько изображений во время выполнения.

0 голосов
/ 04 февраля 2019

Лотти имеет один XML атрибут app:lottie_imageAssetsFolder, который также может быть установлен во время выполнения: animationView.setImageAssetsFolder("images/");.с этим набором можно ссылаться на изображения в json.это задокументировано in-line;см. комментарии над строкой # 599 и # 630 .это также объясняется в документации (src/assets может не быть вариантом, так как он недоступен для записи):

Иногда изображения не связаны сУстройство.Вы можете сделать это, чтобы сэкономить место в вашем apk или если вы загрузили анимацию из сети.Чтобы справиться с этим делом, вы можете установить ImageAssetDelegate на LottieAnimationView или LottieDrawable.Делегат будет вызываться каждый раз, когда Лотти пытается отобразить изображение.Он передаст имя изображения и попросит вас вернуть растровое изображение.Если у вас его еще нет (например, если он все еще загружается), просто верните ноль, и Лотти будет продолжать спрашивать каждый кадр, пока вы не вернете ненулевое значение.

animationView.setImageAssetDelegate(new ImageAssetDelegate() {
    @Override
    public Bitmap fetchBitmap(LottieImageAsset asset) {
        if (downloadedBitmap == null) {
            // We don't have it yet. Lottie will keep asking until we return a non-null bitmap.
           return null;
        }
        return downloadedBitmap;
    }
});
...