Animation插值器:解决Android Animation 循环执行的停顿问题

简介: 在Android开发中,有时候我们需要一个动画一直循环执行下去,常见的如laoding菊花一直旋转,这时候就需要使用Animation的repeat功能

前言


在Android开发中,有时候我们需要一个动画一直循环执行下去,常见的如laoding菊花一直旋转,这时候就需要使用Animation的repeat功能,示例代码如下:


animation = new RotateAnimation(0f, 360f, lightView.getWidth() / 2, lightView.getHeight() / 2);
animation.setDuration(2500);
animation.setRepeatMode(Animation.RESTART);
animation.setRepeatCount(Animation.INFINITE);
lightView.startAnimation(animation);
复制代码


为lightView执行以中心为圆点的旋转动画。看看相关的两个参数:

  • repeatMode设为RESTART,在动画执行结束后继续从头执行。由于单次动画是旋转一周,这样两次动画可以衔接在一起。
  • repeatCount设为INFINITE来保证无限循环执行动画。

在实际的展示效果中,你会发现每次动画播放完都会停顿一下再去播放下次动画,动画无法连贯的执行。

其实并不是动画间有停顿,而是animation的默认插值器的效果。


解决


解决方法很简单,为Animation设置线性插值器即可,代码如下:


animation.setInterpolator(new LinearInterpolator());
复制代码


这样我们解决了问题,但是为什么要这么做呢?来看看Animation的构造函数源码:


public Animation() {
    ensureInterpolator();
}
public Animation(Context context, AttributeSet attrs) {
    TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Animation);
    ...
    ensureInterpolator();
}
复制代码


可以看到构造函数中都会调用ensureInterpolator函数,这个函数源码如下:


protected void ensureInterpolator() {
    if (mInterpolator == null) {
        mInterpolator = new AccelerateDecelerateInterpolator();
    }
}
复制代码


所以,Animation默认会使用AccelerateDecelerateInterpolator这个插值器,这个插值器的作用是动画播放有个加速减速的过程,类似汽车启动和刹车的效果,开始播放时会从静止状态逐渐加速直到匀速,接近结束时会逐渐减速直至停止。所以当我们未设置其他插值器的时候,由于这个插值器的作用导致动画效果上无法连贯,有一个停顿的效果。


而线性插值器LinearInterpolator的效果是动画全程匀速执行,这样当我们设置了这个插值器动画就可以连贯起来。

插值器极大的丰富了Animation的效果,我们可以通过系统自带的或者自定义的插值器来完成很多酷炫的效果,大家有兴趣可以找资料看一下。


目录
相关文章
|
11月前
|
XML Java Android开发
|
10月前
|
XML Java Android开发
Android 中通过Java代码动态生成EditText视图,并循环遍历EditText取出遍历的ID和文本框的值
Android 中通过Java代码动态生成EditText视图,并循环遍历EditText取出遍历的ID和文本框的值
114 0
|
11月前
|
XML Android开发 数据格式
|
XML API Android开发
Android 属性动画Property Animation(中)
ValueAnimator指定整形、浮点型或者颜色值作为动画值,在一定时间内平滑过渡。可以通过ofInt(),ofFloat(),或ofObject()来或得一个ValueAnimator
|
Android开发
Android Animation动画
Android Animation动画
127 0
Android Animation动画
|
XML Java API
Android 属性动画(Property Animation) 完全解析
Android 属性动画(Property Animation) 完全解析
Android 属性动画(Property Animation) 完全解析
|
Java Android开发 图形学
Android修行手册之Kotlin-【条件语句】、【循环控制】篇
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
297 0
|
API Android开发
【Android 属性动画】属性动画 Property Animation 与 视图动画 View Animation 区别
【Android 属性动画】属性动画 Property Animation 与 视图动画 View Animation 区别
114 0
|
消息中间件 Android开发
【Android 异步操作】手写 Handler ( 循环者 Looper | Looper 初始化 | Looper 遍历消息队列 MessageQueue )
【Android 异步操作】手写 Handler ( 循环者 Looper | Looper 初始化 | Looper 遍历消息队列 MessageQueue )
174 0
|
Android开发
Android笔记:viewPager+fragment实现循环滚动
Android笔记:viewPager+fragment实现循环滚动
171 0