如何在Android上使用Lottie提供多个图像

时间:2018-04-20 06:31:38

标签: android lottie

我正在开发一款带有Lottie动画的应用。其中一个lottie动画需要两个图像文件(img_0.png,img1_.png)。

例如,

lottie json文件[data.json]:{&#34; v&#34;:&#34; 5.1.7&#34;,&#34; fr&#34;:60,&#34 ; IP&#34;:0,&#34; OP&#34; 120&#34; W&#34; 180&#34; H&#34;:200,&#34;纳米&#34 ;: &#34; 2&#34;&#34; DDD&#34;:0,&#34;资产&#34;:[{&#34; ID&#34;:&#34; image_0&#34;,& #34; W&#34;:96,&#34; H&#34;:96,&#34; U&#34;:&#34;影像/&#34;&#34; p&#34 ;: &#34; img_0.png&#34;},{&#34; ID&#34;:&#34; IMAGE_1&#34;&#34; W&#34; 180&#34; H&#34; :180,&#34; U&#34;:&#34;影像/&#34;&#34; p&#34;:&#34; img_1.png&#34;}],.... < / em>的

我无法在main / assets文件夹中为LottieAnimationView准备所有图像,因此我使用&#34; setImageAssetDelegate&#34;从异步中获取多个图像的方法。

这是我的代码。

        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();
                }
            });

但如果我使用&#34; setImageAssetDelegate&#34;方法,我只能把一个图像放到lottie。我想在一个lottie动画中放置多个不同的图像。

not like this 我不想要这个。 (上面的代码显示了这个动画。)

but like this 我需要这个&#34; setImageAssetDelegate&#34;方法

有人对此有任何想法吗? 感谢。

1 个答案:

答案 0 :(得分: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同步加载图片,并且您必须想出一种方法来将图片ID与正确的图片网址相匹配。

另一种方法是使用Glide加载所有动画所需的图像,保存它们(在内存或外部存储器中),然后才开始播放动画;这可能适用于小动画;对于任何更大的东西,你都会遇到麻烦,因为a。加载所有图像需要太长时间或b。你内存不足。