在工作中产品提出了这么一个一个动画需求,如下图:
其实这个需求本来直接用属性动画就解决了,但是为了学学Lottie就强行用了一把。(然后最后的结果还是用了属性动画,因为Lottie的交互性不强,或者说我不太会用;感觉Lottie动画主要用来展示性的动画,交互功能比较多的动画个人还是喜欢用属性动画);
1.导入lottie库:
//lottie框架
compile'com.airbnb.android:lottie:2.1.0'
2.导入json文件到assets文件夹:(这个json文件找动效设计师要)
3.xml文件中使用:
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_indicator"
android:layout_width="41.2dp"
android:layout_height="8.6dp" />
4.初始化控件:
@Bind(R.id.lottie_indicator)
LottieAnimationView lottie_indicator;
4.lottie使用方法介绍:
//初始化,引入json
LottieComposition.Factory.fromAssetFileName(mFragment.getActivity(), "scheme_data_animotor1.json", new OnCompositionLoadedListener() {
@Override
public void onCompositionLoaded(@Nullable LottieComposition lottieComposition) {
//这句话是关键,相当于将空间和json绑定
lottie_indicator.setComposition(lottieComposition);
}
});
//添加动画更新(进度)的监听,这里的监听可以理解为播放进度(注意:这个进度并不一定是等分(0.1,0.2,0.3...)可能是0.12343,0.3213)
lottie_indicator.addAnimatorUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedFraction = valueAnimator.getAnimatedFraction();
}
});
lottie_indicator.addAnimatorListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
//动画开始播放的时候会调用
}
@Override
public void onAnimationEnd(Animator animator) {
//动画结束的时候回调用
}
@Override
public void onAnimationCancel(Animator animator) {
//动画主动取消的时候会调用
}
@Override
public void onAnimationRepeat(Animator animator) {
//loop的时候会调用,注意是重新播放的时候会调用
}
});
//动画的播放
//设置动画的起始播放位置,只能设置开始位置,不能设置结束位置,不写默认0
lottie_indicator.setProgress(0);
//播放
lottie_indicator.setVisibility(View.VISIBLE);
lottie_indicator.playAnimation();
//暂停
//暂停的实质是,保存当前的progress,然后再cancel这个动画,下次播放的时候,从保存的progress开始播放
lottie_indicator.pauseAnimation();
//结束播放,取消播放,终止播放
lottie_indicator.cancelAnimation();
lottie_indicator.setVisibility(View.INVISIBLE);
//倒放,回放
lottie_indicator.reverseAnimation();
//不断的重复播放,轮播
lottie_indicator.loop(true);
//动画是否在播放
boolean isAnimating = lottie_indicator.isAnimating();
//动画播放进度
long duration = lottie_indicator.getDuration();
//特别注意,在当前activity销毁时,保持好的习惯
lottie_indicator.cancelAnimation();
//移除监听
//lottie_indicator.removeUpdateListener();
//lottie_indicator.removeAnimatorListener();
总结:我把大概的方法都放在这了,大家在用的过程中可以根据自己的需求个性化使用;
考据资源:
https://www.jianshu.com/p/2865812fed41
https://zhuanlan.zhihu.com/p/68623762