Как предоставить несколько изображений с помощью Lottie на Android

Я разрабатываю приложение с анимацией Lottie. Для одной анимации лотереи нужны два файла изображений (img_0.png, img1_.png).

Например,

файл lottie json [data.json]: {"v": "5.1.7", "fr": 60, "ip": 0, "op": 120, "w": 180, "h" : 200, "nm": "2", "ddd": 0, "assets": [{"id": "image_0", "w": 96, "h": 96, "u": "images / "," p ":" img_0.png "}, {" id ":" image_1 "," w ": 180," h ": 180," u ":" images / "," p ":" img_1. png "}], ....

Я не могу подготовить все изображения для LottieAnimationView в папке main / assets, поэтому я использую метод setImageAssetDelegate для асинхронного получения нескольких изображений с URL-адресов.

Это мой код.

        Glide.with(this)
            .asBitmap()
            .load("https://www.google.co.kr/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(final Bitmap resource, Transition<? super Bitmap> transition) {

                    LottieAnimationView lottie = findViewById(R.id.lottie);
                    lottie.setImageAssetDelegate(new ImageAssetDelegate() {
                        @Override
                        public Bitmap fetchBitmap(LottieImageAsset asset) {
                            return resource;
                        }
                    });
                    lottie.playAnimation();
                }
            });

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

not like this Я не хочу этого. (код выше показывает эту анимацию.)

но вот так мне это нужно с методом "setImageAssetDelegate".

Кто-нибудь знает об этом? Спасибо.


person eyeballs    schedule 20.04.2018    source источник


Ответы (1)


Асинхронная загрузка изображений работать не будет. ImageAssetDelegate предназначен для того, чтобы быть «поставщиком» изображений, которые необходимы анимации при воспроизведении.

Его метод public Bitmap fetchBitmap(LottieImageAsset asset) будет вызываться для каждого изображения в анимации во время воспроизведения анимации, и вы обязаны указать правильный, где LottieImageAsset, переданный этому методу, предоставит вам подробную информацию о том, какое изображение требуется в данный момент. взято из файла анимации json.

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

Пример:

LottieAnimationView lottie = findViewById(R.id.lottie);
lottie.setImageAssetDelegate(new ImageAssetDelegate() {
    @Override
    public Bitmap fetchBitmap(LottieImageAsset asset) {
        return Glide.loadSychronous("http://" + asset.getId + ".png");
    }
});
lottie.playAnimation(); 

Примечание: это псевдокод, вам нужно будет узнать, как загружать изображения синхронно с Glide, и вам нужно будет придумать способ сопоставления идентификатора изображения с правильным URL-адресом изображения.

Другой способ - использовать Glide для загрузки всех изображений, необходимых для анимации, сохранения их (в памяти или во внешнем хранилище) и только затем начать воспроизведение анимации; Это может сработать для небольшой анимации; для чего-то большего вы столкнетесь с проблемами, потому что. загрузка всех изображений занимает слишком много времени или b. у вас заканчивается память.

person fweigl    schedule 20.04.2018