前言:Lottie对于我们安卓开发人员来说就是实现复杂动画效果的神器,越来越多的项目中使用了Lottie来实现复杂好看的动画并因此提高的动画的开发成本和效率,当然我们的项目也开始使用Lottie了。下面这些动画在之前看着感觉实现起来很亚历山大,有了Lottie就很简单了。
Lottie 是Airbnb开源的动画实现项目,支持Android、iOS、ReactNaitve三大平台。Lottie 的使用前提是需要先通过插件 bodymovin 将 Adobe After Effects (AE)生成的 aep 动画工程文件转换为通用的 json 格式描述文件( bodymovin 插件本身是用于网页上呈现各种AE效果的一个开源库)。Lottie 所做的事情就是实现在不同移动端平台上呈现AE动画的方式,从而达到动画文件的一次绘制、一次转换,随处可用的效果。
怎么使用
1.添加依赖
dependencies {
compile 'com.airbnb.android:lottie:$lottieVersion'
}
2. 使用
Lottie支持Android API 16 及以上的系统版本, 最简单的使用方式是直接在布局文件中添加:
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/animation_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lottie_fileName="hello-world.json"
app:lottie_loop="true"
app:lottie_autoPlay="true" />
你也可以选择使用 Java 代码的方式进行动画加载,从app/src/main/assets获取json文件:
LottieAnimationView animationView = (LottieAnimationView)findViewById(R.id.animation_view);
animationView.setAnimation("hello-world.json");
animationView.loop(true);//设置动画是否循环播放,true表示循环播放,false表示只播放一次
animationView.playAnimation();
这种方式会在后台进行一次性的异步文件加载和动画渲染工作 。
如果你想重复利用一个动画效果,例如在列表的每个项目中,或者从一个网络请求的返回中解析JSONObject对象,你可以采用如下方式先生成一个Cancellable, 然后进行设置:
LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
...
Cancellable compositionCancellable = LottieComposition.Factory.fromJson(getResources(), jsonObject,
new OnCompositionLoadedListener() {
@Override public void onCompositionLoaded(LottieComposition composition) {
animationView.setComposition(composition);
animationView.playAnimation();
}
});
// Cancel to stop asynchronous loading of composition
// compositionCancellable.cancel();
在动画执行过程中你可以通过如下方式控制动画或者添加监听:
animationView.addAnimatorUpdateListener(//监听动画进度
new ValueAnimator.AnimatorUpdateListener() {
@Override public void onAnimationUpdate(ValueAnimator animation) {
// Do something.
}
});
animationView.playAnimation();//开始动画
...
animationView.cancelAnimation();//结束动画
...
animationView.pauseAnimation();//暂停动画
...
animationView.resumeAnimation();//重启动画
...
animationView.setScaleX(0.5f);//设置X轴方向上的缩放比例,0f为不可见,1f原始大小 Ps.原setScale方法在2.0.0版本后已弃用
animationView.setScaleY(0.5f);//设置Y轴方向上的缩放比例
...
if (animationView.isAnimating()) {//动画正在进行中
// Do something.
}
...
animationView.setProgress(0.5f);//手动设置动画进度
...
// Custom animation speed or duration.
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f)//自定义一个属性动画
.setDuration(500);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
pu