错误:膨胀类com.airbnb.lottie.LottieAnimationView

4

我所做的:

步骤1)

在 gradle 中添加了以下依赖项:

compile 'com.airbnb.android:lottie:2.0.0-beta4'

步骤2)

Airbnb没有告诉我们在哪里放置动画JSON文件。但是,我在他们的示例应用程序中看到它放在app/src/main/assets。所以我创建了那个文件夹并在里面插入了一些JSON动画。

步骤3)

activity_main.xml中添加以下内容:

<com.airbnb.lottie.LottieAnimationView
    android:id="@+id/animation_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:lottie_fileName="EmptyState.json"
    app:lottie_loop="true"
    app:lottie_autoPlay="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

运行应用程序时,我遇到了以下错误:

04-29 12:55:37.253 21877-21877/com.example.ross.testitout E/AndroidRuntime: FATAL EXCEPTION: main
                                                                      
Process: com.example.ross.testitout, PID: 21877
                                                                      
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ross.testitout/com.example.ross.testitout.MainActivity}: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.airbnb.lottie.LottieAnimationView 

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)

我想知道自己做错了什么。同时,缺乏深入的教程,这让我很遗憾,像我这样的初学者需要花费比必要更长的时间来弄清楚事情。


你使用了 centerCrop 而不是 center 吗? - Muhammad Waleed
5个回答

11

回答自己的问题,问题在于缺少官方资产文件夹。您可以手动创建它,但这不会起作用。

按照以下步骤操作:

  1. 在Android Studio中打开您的项目。

  2. 选择左侧项目文件夹中的任何内容。

  3. 按下alt+insert,会出现一个菜单。

  4. 选择子菜单“文件夹”,然后点击“资产文件夹”。

这将创建所需的资产文件夹,您可以在其中存储动画。

从那里,您可以插入JSON动画并将其链接到此处。

您可以从各种地方获取动画(如lottie文件或官方示例应用程序),也可以使用Adobe After Effects自己制作动画。


3
在Mac OS X上,Android Studio中的等效快捷键是Command+n(而不是上面的alt-insert)。 - flutter
你刚刚拯救了我的一天,为你的答案加上 +1。 - Anuj Sharma

3
没有Assets文件夹,您也可以使用res/raw文件夹进行操作:
check_mark_done.json放置在路径:app/src/main/res/raw目录中。您可以从这里下载check_mark_done.json。
用于LottieAnimationView的XML布局文件。
<com.airbnb.lottie.LottieAnimationView
          android:id="@+id/lottieAnimationView"
          android:layout_width="144dp"
          android:layout_height="144dp"
          android:layout_margin="16dp"
          app:lottie_autoPlay="true"
          app:lottie_loop="true"
          app:lottie_rawRes="@raw/check_mark_done" />

在活动文件中:
LottieAnimationView animationView = findViewById(R.id.lottieAnimationView);
startCheckAnimation();

startCheckAnimation()的定义:

该函数用于启动检查动画。
private void startCheckAnimation() {
    ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f).setDuration(5000);
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            animationView.setProgress((Float) valueAnimator.getAnimatedValue());
        }
    });

    if (animationView.getProgress() == 0f) {
        animator.start();
    } else {
        animationView.setProgress(0f);
    }
}

0
今天我遇到了类似的错误。这可能是由于颜色过滤器引起的。您可以通过以下方式编程设置colorFilter来解决问题。
<com.airbnb.lottie.LottieAnimationView
    android:id="@+id/your_id"
    android:layout_width="90dp"
    android:layout_height="90dp"
    android:layout_gravity="center"
    app:lottie_autoPlay="true"
    app:lottie_loop="true"
    app:lottie_colorFilter="#FFFFFF" <!-- PROBLEM, DONT KNOW WHY? -->
    app:lottie_rawRes="@raw/your_lottie_res" />

您可以通过以下方式以编程方式设置colorFilter来解决问题。这是来自Github的。

val filter = SimpleColorFilter(Color.parseColor("#fe3144"))
val keyPath = KeyPath("**")
val callback = LottieValueCallback<ColorFilter>(filter)
lottieAnimationView.addValueCallback<ColorFilter>(keyPath, LottieProperty.COLOR_FILTER, callback)

0
补充之前的回答。您需要添加一个官方资产文件夹。我发现最简单的方法是在Mac上(可能也适用于Windows),右键单击Java->新建->文件夹->资产文件夹。
希望这能帮助到某些人,我花了很多时间寻找错误。

Image of the process


0

我遇到了同样的问题,我做了上面答案中提到的所有事情。我遵循简单的步骤。

  1. 在app文件夹下创建一个assets文件夹。
  2. 将所有的.JSON动画文件放入assets文件夹中。
  3. 如果你看到android:src="@drawable/image",请不要使用它,将其删除。
  4. 检查你的Airbnb Lottie库版本'com.airbnb.android:lottie:2.8.0',从这里检查最新版本。

就是这样,希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接