官网:https://lottiefiles.com
Gradle依赖:implementation 'com.airbnb.android:lottie:3.5.0'
在布局文件中配置
<com.airbnb.lottie.LottieAnimationView android:id="@+id/animation_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" app:lottie_rawRes="@raw/button_switch" app:lottie_autoPlay="true" app:lottie_loop="true" app:lottie_cacheStrategy="weak" />
lottie_rawRes:json资源路径
lottie_autoPlay:自动播放
lottie_loop:循环播放
lottie_cacheStrategy:使用缓存策略。None: 无缓存 ,Weak: 弱引用缓存 ,Strong: 强引用缓存
下载的json文件需要放在res/raw目录下
LottieAnimationView animationView = findViewById(R.id.animation_view);//在assets的json文件animationView.setAnimation("R.raw.button_switch");//设置动画循环播放animationView.setRepeatCount(LottieDrawable.INFINITE);//设置动画进度0f-->1fanimationView.setProgress();//设置动画的重复模式LottieDrawable.RESTART LottieDrawable.REVERSEanimationView.setRepeatMode();//设置动画的最小进度和最大进度 (播放范围)animationView.setMinAndMaxProgress(30/177f, 53f/177f);//播放动画animationView.playAnimation();//暂停动画animationView.pauseAnimation(); //取消动画animationView.cancelAnimation(); //动画改变监听事件animationView.addAnimatorUpdateListener(animation -> { //动画在运行时 if (animationView.isAnimating()) { // Do something} 动画的进度到0.5f时 if (animationView.getProgress() == 0.5f){ // Do something }});
通过ValueAnimator引擎设置动画运行速率
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f); animator.setDuration(500); animator.setInterpolator(new LinearInterpolator());animator.addUpdateListener(animation -> { animationView.setProgress(animation.getAnimatedValue());});
案例
private LottieAnimationView animationView;//开关状态boolean switchStatus = true;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); animationView = findViewById(R.id.animation_view); // animationView.setAnimation(R.raw.button_switch); animationView.setAnimationFromUrl("https://assets3.lottiefiles.com/packages/lf20_vseol67g.json"); animationView.setProgress(120f/177f); animationView.setOnClickListener(v->{ //30-->53 关-->开 //120-->177 开-->关 if (switchStatus){ //如果是开启状态,点击后关闭 switchStatus =false; animationView.setMinAndMaxProgress(120f/177f, 1f); }else { switchStatus = true; animationView.setMinAndMaxProgress(30/177f, 53f/177f); } animationView.playAnimation(); Toast.makeText(this, switchStatus ? "open":"close", Toast.LENGTH_SHORT).show(); });}
<com.airbnb.lottie.LottieAnimationView android:id="@+id/animation_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" app:lottie_rawRes="@raw/button_switch" />