单个LottieAnimationView加载多个lottie动画

需求

最近做了一个单个LottieAnimationView根据用户点击选项的不同,加载不同的lottie动画的需求。网上的一些demo和博客大多只是单独的加载一个lottie动画,普遍不会有问题,但是如果加载不同的lottie动画时,遇到了一些问题,踩了一些坑,比如lottie动画只能播放第一个,后面的就不放了,比如第二个lottie动画播放时会闪一下第一个lottie动画画面,比如播放混乱,明明点击的是第一个动画,播放的确实第二个等等。特此把最后的使用总结如下。最后的效果因为涉及内部内容就不放了。

加载sdcard的lottie动画

 /**
     * 播放sdcard的动画
     * @param jsonFile	json文件
     * @param imagesDir json文件引用的image文件的目录
     * @throws Exception
     */
    private void  showSdcardLottieEffects(File jsonFile,File imagesDir) throws Exception{
        BufferedReader bufferedReader = new BufferedReader(new FileReader(jsonFile));
        String content = null;
        StringBuilder stringBuilder = new StringBuilder();
        while ((content = bufferedReader.readLine()) != null){
            stringBuilder.append(content);
        }

        JSONObject jsonObject = new JSONObject(stringBuilder.toString());
        final String absolutePath = imagesDir.getAbsolutePath();
        //提供一个代理接口从 SD 卡读取 images 下的图片
        specialEffectLottieAnim.setImageAssetDelegate(new ImageAssetDelegate() {
            @Override
            public Bitmap fetchBitmap(LottieImageAsset asset) {
                Bitmap bitmap = null;
                FileInputStream fileInputStream = null;
                try {
                    fileInputStream = new FileInputStream(absolutePath + File.separator + asset.getFileName());
                    bitmap = BitmapFactory.decodeStream(fileInputStream);
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    try {
                        if (bitmap == null) {
                            bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ALPHA_8);
                        }
                        if (fileInputStream != null) {
                            fileInputStream.close();
                        }
                    } catch (IOException e) {
                        LogUtil.e(TAG, e);
                    }
                }
                return bitmap;
            }
        });

        LottieComposition.Factory.fromJson(getResources(), jsonObject, new OnCompositionLoadedListener() {
            @Override
            public void onCompositionLoaded(@Nullable LottieComposition composition) {
                if(composition == null){
                    return;
                }
                specialEffectLottieAnim.cancelAnimation();
                specialEffectLottieAnim.setProgress(0);
                specialEffectLottieAnim.setComposition(composition);
                specialEffectLottieAnim.playAnimation();
                specialEffectLottieAnim.setVisibility(View.VISIBLE);
            }
        });

    }

加载应用内部assets目录下的lottie文件

/**
     * 从本地查找lottie动画
     * @param interactCode 特效name
     */
    private void showLocalLottieEffects(String interactCode){
        LogUtil.i(TAG, "启动本地动画 folderIsWatch:"+ folderIsWatch+ " interactCode:"+interactCode);
        try{
        //json文件的路径根据具体需求修改
            LottieComposition composition = LottieComposition.Factory.fromFileSync(this, "lottie/" +interactCode+".json");
            specialEffectLottieAnim.cancelAnimation();
            specialEffectLottieAnim.setProgress(0);
            specialEffectLottieAnim.setComposition(composition);
            specialEffectLottieAnim.playAnimation();
            specialEffectLottieAnim.setVisibility(View.VISIBLE);
        }catch (Exception e){
            LogUtil.i(TAG, "启动本地动画 "+"  interactCode:"+interactCode+"出错",e);
        }
    }
  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Lottie是一个用于Android、iOS和Web的开源库,它可以加载和渲染Adobe After Effects动画导出的JSON文件。使用Lottie,开发者可以轻松地将复杂的动画效果集成到自己的应用程序中,而无需编写复杂的动画代码。要加载JSON动画,只需将JSON文件放置在assets文件夹中,并使用LottieAnimationView加载即可。Lottie还提供了许多自定义属性,可以让开发者更好地控制动画的行为和外观。 ### 回答2: Android Lottie是由Airbnb开源的一个动画库,可用于加载和渲染Adobe After Effects创建的Lottie动画文件,这些动画文件存储为JSON格式。与传统的GIF、WebP和MP4格式相比,Lottie动画文件更小,可缩放并且无损失,是完美的UI动画解决方案。 下面是一个简单的步骤,让您轻松加载JSON动画文件: 1. 在您的Android项目中添加依赖项:添加以下dependency到您的build.gradle文件中。 dependencies { implementation 'com.airbnb.android:lottie:3.4.1' } 2.将Lottie动画文件放在assets文件夹中:将动画JSON文件放在您的Android项目的assets文件夹下。 3. 在布局文件中添加LottieView:在布局文件中添加LottieView并设置宽度和高度。您可以使用app:lottie_file指定动画的文件名。例如以下代码: <com.airbnb.lottie.LottieAnimationView android:id="@+id/animation_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:lottie_file="your_animation.json" /> 4. 在Activity中加载动画:在您的Activity的onCreate方法中加载动画文件,并开始播放动画LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view); animationView.setAnimation("your_animation.json"); animationView.loop(true); animationView.playAnimation(); 通过上述步骤,您就能够成功地加载JSON动画文件,并将其渲染在您的Android app中。Lottie提供了许多自定义属性,以及可在运行时访问的API,可以让您在呈现动画时,获得更多的自由度和控制权限。 ### 回答3: Android Lottie是一个用于渲染矢量动画的库,由Airbnb开源。该库可以加载由Adobe After Effects导出的json文件,并将其渲染为原生Android视图中的动画效果。Lottie使用了高效而轻量级的渲染引擎来实现这一点,从而为开发人员提供了一种快速而简便的方式来实现优秀的矢量动画效果。 为了加载json动画,首先我们需要在项目中引入Lottie库,这可以通过在build.gradle文件中添加以下依赖项来完成: ``` implementation 'com.airbnb.android:lottie:3.6.1' ``` 完成之后,我们可以在布局文件中添加一个LottieAnimationView视图,并在java代码中使用以下代码加载json动画: ``` LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animationView); animationView.setAnimation("your_animation.json"); animationView.playAnimation(); ``` 在这里,我们将LottieAnimationView的文件名设置为“your_animation.json”,但是您应该将其替换为实际的json文件名。 此外,Lottie也提供了其他一些方法和属性,可用于与动画交互和控制。例如,您可以使用以下方法暂停和恢复动画: ``` animationView.pauseAnimation(); animationView.resumeAnimation(); ``` 还可以使用以下方法将动画设置为循环播放: ``` animationView.setRepeatMode(LottieDrawable.RESTART); animationView.setRepeatCount(LottieDrawable.INFINITE); ``` 总的来说,Lottie是一种简单而有力的工具,可以帮助我们在Android应用程序中实现高质量的矢量动画效果。通过加载json文件并使用LottieAnimationView视图,我们可以轻松地将动画集成到我们的应用程序中。同时,Lottie还提供了一系列方法和属性,使我们可以对动画进行精细的控制和交互,以生成更加生动和有趣的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值