一、json动画和组合动画的对比
(1)Json动画流畅度高,占用的CPU比较高,不考虑CPU的情况,推荐使用。
(2)组合动画占用的CPU比较低,不是很复杂的json动画可以用组合动画来代替。
总的来说,更看重UI效果的话,可以使用Json动画,用户体验更好;更看重系统性能的话,可以使用组合动画来代替。
二、json动画的使用
1. 在App的build.gradle中加入lottie库
implementation 'com.airbnb.android:lottie:3.4.4'
2. 如果json动画中存多个图片,需要在工程app/src/main/下创建文件夹assets,如下图:
3.在代码中使用如下
在xml中使用LottieAnimationView这个类
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottieAnimationView"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="20dp"
android:layout_marginStart="20dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_btn"
android:gravity="center" />
在Activity中使用
//设置data.json引用的图片资源文件夹名称,如果没有可不写
mBinding.lottieAnimationView.imageAssetsFolder = "images"
mBinding.lottieAnimationView.setAnimation("data.json")
mBinding.lottieAnimationView.loop(true)
代码控制 暂停,取消,开始
lottieAnimationView.pauseAnimation();
lottieAnimationView.cancelAnimation();
lottieAnimationView.playAnimation();
三、组合动画的使用AnimatorSet
private fun rotateAnim() {
//旋转动画(最后两个为负数是逆时针)
val rotate = ObjectAnimator.ofFloat(mBinding.imgMeeting1, "rotation", -0f, -360f)
rotate.repeatCount =ValueAnimator.INFINITE
rotate.interpolator = LinearInterpolator()
//渐变动画(不透明->透明->不透明)
val alpha = ObjectAnimator.ofFloat( mBinding.imgMeeting1, "alpha", 1f, 0f, 1f)
alpha.repeatCount =ValueAnimator.INFINITE
alpha.interpolator = LinearInterpolator()
alpha.duration = 2000
//使用AnimatorSet组合起来
animSet = AnimatorSet();
animSet.play(rotate)
.with(alpha)
animSet.duration = 4000
}
四、示例Demo
json动画和组合动画-Android文档类资源-CSDN文库
五、参考:
json动画的更多使用参考下面的博客:【Android -- 动画】Lottie 动画的基本使用_android lottie动画_Kevin-Dev的博客-CSDN博客
组合动画使用参考下面的博客: 【Android 】属性动画最全解析_android 属性动画_Teacher.Hu的博客-CSDN博客