【Android】引入Lottie实现好看的启动动画吧!
在移动应用开发中,动画是提升用户体验的重要元素之一。然而,传统的动画实现方式往往需要大量的资源和时间。Lottie动画库的出现,为Android开发者提供了一种简单而强大的解决方案,使得复杂的动画效果得以轻松实现。
Lottie简介
Lottie是由Airbnb开源的一个库,它允许开发者在Android、iOS、Web等平台上渲染After Effects动画。Lottie通过解析JSON文件来实现动画,这意味着设计师可以在After Effects中创建动画,然后导出为JSON格式,开发者可以直接在应用中使用这些动画。
Lottie的优势
- 跨平台支持:Lottie支持Android、iOS、Web等多个平台,使得动画设计可以跨平台使用。
- 性能优化:Lottie动画使用原生渲染,不依赖于CPU或GPU,因此性能更加出色。
- 易于集成:Lottie的集成非常简单,只需要添加几个依赖项即可。
- 实时更新:开发者可以根据需要实时更新动画效果,而无需重新编译应用。
在Android中使用Lottie
选择一个心仪的动画吧
进入Lottie官网,选择一个心仪的动画:
比如这个:
选择Download & Export
将其下载到本地,而后打开AndroidStudio:
在项目文件中的res包中创建一个raw文件夹:
注意:创建时就需要选择好资源类型
然后将我们准备好的json文件导入即可~
引入依赖
在Android中使用Lottie,首先需要在项目的build.gradle文件中添加Lottie库的依赖:
如图所示:
在依赖文件中添加这样一段:
implementation ("com.airbnb.android:lottie:6.4.0")
用于引入Lottie。
别忘了点击Sync Now应用。
渲染Lottie动画
Lottie提供了多种方式来渲染动画,包括在XML布局文件中直接使用LottieAnimationView
,或者在Java代码中动态加载动画。
在xml布局文件中,可以这样定义一个LottieAnimationView:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:clipChildren="false"
android:clipToPadding="false">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lottie_autoPlay="true"
app:lottie_rawRes="@raw/asd" />
</LinearLayout>
lottie的常用属性如下:
- lottie_fileName - 指定要播放的动画的 JSON 文件名。这个 JSON 文件包含了 After Effects 导出的动画数据。
- lottie_autoPlay - 一个布尔值,用于指定动画是否在组件加载完成后自动播放。默认为
false
。- lottie_loop - 一个布尔值,用于指定动画是否循环播放。默认为
false
,表示动画只播放一次。- lottie_repeatCount - 指定动画循环的次数。可以设置为一个具体的数字,或者使用
LottieDrawable.INFINITE
表示无限循环。- lottie_speed - 动画播放的速度。默认值为 1.0,表示正常速度。可以设置为小于 1 的值来减慢动画,或大于 1 的值来加快动画。
- lottie_imageAssetsFolder - 指定存放动画中使用到的图片资源的文件夹路径。如果动画中包含了图片,需要设置这个属性。
- lottie_cacheStrategy - 指定 Lottie 动画的缓存策略。可以设置为
strong
、weak
或none
,以控制动画在内存中的缓存行为。- lottie_enableMergePaths - 一个布尔值,用于指定是否启用路径合并。在某些情况下,启用路径合并可以提高性能,但可能会影响动画的精确度。
- lottie_scale - 动画的缩放比例。默认为 1.0,表示原始大小。
- lottie_animationListener - 设置一个动画监听器,用于监听动画的播放状态,如开始播放、循环播放、播放完成等。
- lottie_progress - 动画的当前进度,范围从 0 到 1。可以用来控制动画从特定进度开始播放。
- lottie_colorFilter - 用于设置动画的整体颜色滤镜,可以改变动画的颜色。
而在Java代码中,可以这样加载或者控制Lottie动画:
LottieAnimationView animationView = findViewById(R.id.lottieAnimationView);
animationView.setAnimation("animation.json");
animationView.playAnimation();
也可以在Java代码中这样设置属性:
LottieAnimationView lottieAnimationView = findViewById(R.id.animation_view);
lottieAnimationView.setAnimation("example.json");
lottieAnimationView.loop(true);
lottieAnimationView.repeatCount(LottieDrawable.INFINITE);
lottieAnimationView.setSpeed(1.0f);
lottieAnimationView.setImageAssetsFolder("images");
lottieAnimationView.enableMergePaths(true);
lottieAnimationView.setScale(1.0f);
在Activity中进行别的动画的编写,以及MainActivity的启动
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
LottieAnimationView lottie;
lottie = findViewById(R.id.lottie);
lottie.animate().translationX(2000).setDuration(2000).setStartDelay(2900);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(getApplicationContext(), MainActivity2.class);
startActivity(intent);
}
},4000);
}
}
-
初始化LottieAnimationView:
LottieAnimationView lottie; lottie = findViewById(R.id.lottie);
这里通过
findViewById
方法获取了布局文件中定义的LottieAnimationView
组件,并将其赋值给变量lottie
。设置动画效果:
lottie.animate().translationX(2000).setDuration(2000).setStartDelay(2900);
这段代码对
lottie
对象调用了animate()
方法,开始构建一个动画效果。具体来说:translationX(2000)
: 表示动画视图将在X轴上平移2000像素。setDuration(2000)
: 设置动画的持续时间为2000毫秒,即2秒。setStartDelay(2900)
: 设置动画开始前的延迟时间为2900毫秒,即2.9秒。
使用Handler进行延迟操作:
new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(getApplicationContext(), MainActivity2.class); startActivity(intent); } },4000);
这段代码创建了一个新的
Handler
对象,并使用postDelayed
方法安排了一个延迟执行的操作。具体来说:Runnable
: 一个实现了run
方法的匿名内部类,该方法定义了延迟操作要执行的具体代码。getApplicationContext()
: 获取当前应用的上下文。Intent
: 创建一个新的Intent对象,用于在Android中启动新的Activity。MainActivity2.class
: 指定要启动的Activity的类名。startActivity(intent)
: 调用startActivity
方法,使用上面创建的Intent来启动MainActivity2
。
结语
分享一下在学习Android开发主线之余看到的小知识,希望大家喜欢~