错误膨胀 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 文件夹。您可以手动创建它,但它不会起作用。
要使其正常工作,请执行以下操作:
在 Android Studio 中打开您的项目。
Select 位于左侧的项目文件夹中的任何内容。
按alt+insert,会弹出一个菜单。
Select 子菜单 "Folder",然后单击 "Assets Folder"。
这将创建存储动画所需的资产文件夹。
从那里您可以插入 JSON 动画,然后 link 它在那里。
您可以从各个地方获取动画(例如 lottie 文件或官方示例应用程序)或使用 Adobe 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);
}
}
我遇到了同样的问题,我做了上面答案中提到的所有事情。我遵循简单的步骤。
- 在app文件夹下创建一个assets文件夹。
- 将所有your.JSON个动画文件放入assets文件夹
- 如果看到此删除它,请不要使用
android:src="@drawable/image"
。
- 检查您的 Airbnb Lottie 存储库版本
'com.airbnb.android:lottie:2.8.0'
从 here 检查最新版本
就是这些,希望对您有所帮助。
我今天遇到了类似的错误。这可能来自滤色器。您可以通过如下方式以编程方式设置 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)
我做了什么:
步骤 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 文件夹。您可以手动创建它,但它不会起作用。
要使其正常工作,请执行以下操作:
在 Android Studio 中打开您的项目。
Select 位于左侧的项目文件夹中的任何内容。
按alt+insert,会弹出一个菜单。
Select 子菜单 "Folder",然后单击 "Assets Folder"。
这将创建存储动画所需的资产文件夹。
从那里您可以插入 JSON 动画,然后 link 它在那里。
您可以从各个地方获取动画(例如 lottie 文件或官方示例应用程序)或使用 Adobe After Effects 自己制作。
添加上一个答案。您需要添加一个官方 Assets 文件夹。我发现,在 Mac 上(可能也适用于 Windows),最简单的方法是右键单击 Java -> 新建 -> 文件夹 -> 资产文件夹。
希望这对某人有所帮助,我花了很多时间寻找错误。
Image of the process
如果没有 Assets 文件夹,您也可以使用 res/raw 文件夹执行此操作:
将check_mark_done.json
放在路径:app/src/main/res/raw目录。您可以从 here
用于LottieAnimationView
<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);
}
}
我遇到了同样的问题,我做了上面答案中提到的所有事情。我遵循简单的步骤。
- 在app文件夹下创建一个assets文件夹。
- 将所有your.JSON个动画文件放入assets文件夹
- 如果看到此删除它,请不要使用
android:src="@drawable/image"
。 - 检查您的 Airbnb Lottie 存储库版本
'com.airbnb.android:lottie:2.8.0'
从 here 检查最新版本
就是这些,希望对您有所帮助。
我今天遇到了类似的错误。这可能来自滤色器。您可以通过如下方式以编程方式设置 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)