昨天,对Lottie有了一个基本的认知,了解是如何使用Lottie在自己的项目中添加动画。 今天,我们来对Lottie进一步探究,了解它的动画监听器,以及自定义Lottie动画的时间。 官方给我们的提供控制动画与监听的常用方法有: 我们也是基于以上方法做出的案例: 这是我们demo界面
我们先从最简单的开始,暂停动画说起,先上代码
接下来,未动画添加监听器
lottieAnimationView.addAnimatorListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { Toast.makeText(LottieActivity.this,"onAnimationStart",Toast.LENGTH_SHORT).show(); } @Override public void onAnimationEnd(Animator animation) { Toast.makeText(LottieActivity.this,"onAnimationEnd,动画总时长为" + lottieAnimationView.getDuration() + "ms",Toast.LENGTH_SHORT).show(); } /**此方法未进行回调,playAnimator,cancelAnimator,pauseAnimator,回调的都是onAnimationEnd方法*/ @Override public void onAnimationCancel(Animator animation) { Toast.makeText(LottieActivity.this,"onAnimationCancel",Toast.LENGTH_SHORT).show(); } /**当loop=true的时候才会回调此方法*/ @Override public void onAnimationRepeat(Animator animation) { Toast.makeText(LottieActivity.this,"onAnimationRepeat",Toast.LENGTH_SHORT).show(); } });其中onAnimationStart()与onAnimationEnd()回调函数是在动画开始与结束的时候调用。 onAnimationCancel() 未进行回调,playAnimator(),cancelAnimator(),pauseAnimator()回调的都是onAnimationEnd()方法,有知道这个方法如何回调的大神们还请告知 onAnimationRepeat() 方法在动画重复播放的时候调用,此时loop = true才可以 其中getDuration() 方法获取的是动画从开始到结束的总时长,毫秒为单位 setPRogress() 是设置动画的开始位置,范围0-1,类型float
使用ValueAnimator或ObjectAnimator 来自定义Lottie的时长,透明度等等
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f, 0f) .setDuration(60000); valueAnimator.setRepeatCount(3); //重复循环3次 valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { lottieAnimationView.setProgress((float)animation.getAnimatedValue()); } }); valueAnimator.start(); 这段代码自定义动画的时长是60秒,即60秒执行完整个动画 效果ValueAnimator.ofFloat(0f, 1f, 0f) 控制动画完成又倒着执行: 是不是也不难? 接下来,我们使用动画的组合,将Alpha与Value结合使用, 效果图:
代码上来:
Lottie确实让我们开发Android动画变得很灵活,如果不是局限于.json文件,这将是一个很好的动画方案。 这些就是今天学习的,很简单是吧。另附上demo地址:demo
新闻热点
疑难解答