错误膨胀 class com.airbnb.lottie.LottieAnimationView

Error inflating class com.airbnb.lottie.LottieAnimationView

我做了什么:

步骤 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)

想知道我做错了什么。也缺乏详尽的教程,这很遗憾,像我这样的初学者需要花费比必要更长的时间才能弄清楚。

回答我自己的问题,问题是缺少官方 assets 文件夹。您可以手动创建它,但它不会起作用。

要使其正常工作,请执行以下操作:

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

  2. Select 位于左侧的项目文件夹中的任何内容。

  3. alt+insert,会弹出一个菜单。

  4. Select 子菜单 "Folder",然后单击 "Assets Folder"。

这将创建存储动画所需的资产文件夹。

从那里您可以插入 JSON 动画,然后 link 它在那里。

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

添加上一个答案。您需要添加一个官方 Assets 文件夹。我发现,在 Mac 上(可能也适用于 Windows),最简单的方法是右键单击 Java -> 新建 -> 文件夹 -> 资产文件夹。

希望这对某人有所帮助,我花了很多时间寻找错误。

Image of the process

如果没有 Assets 文件夹,您也可以使用 res/raw 文件夹执行此操作:

check_mark_done.json放在路径:app/src/main/res/raw目录。您可以从 here

下载 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" />

在 Activity 文件中:

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

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

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

就是这些,希望对您有所帮助。

我今天遇到了类似的错误。这可能来自滤色器。您可以通过如下方式以编程方式设置 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)