`

Android 动画之Interpolator插入器

 
阅读更多

转载自 soodroid
最终编辑 soodroid

  做了些动画,发现动画都有一个Interpolator的属性,它到底是个啥东西?

  网上也有很多解释Interpolator的文章,基本上都是停留在直接翻译SDK的意思层面上。看了,也就明白一个大概。

  Interpolator英文意思是: 篡改者; 分类机; 校对机

  SDK对Interpolator的描述是:An interpolator defines the rate of change of an animation. This allows the basic animation effects (alpha, scale, translate, rotate) to be accelerated, decelerated, repeated, etc。简而言之Interpolator就是一个“变化率”,一个基本动画的“变化率”。

  比如:从A到B的一个平移动画,移动,当然后速度的快慢,那么从A到B可以是匀速、匀加速、匀减速、变速完成这段距离。假设距离为S,时间为t,速度为v,都知道S=v*t。

这个Interpolator在这里就是一个速度控制器,控制速度变化。先给一个对Interpolator的大概理解,接下来站在程序员的角度来认识Interpolator。

  Interpolator借口只有一个抽象方法getInterpolation(float input),由此SDK中扩展了另外几个常用Interpolator类,分别是:

    ——AccelerateInterpolator:动画从开始到结束,变化率是一个加速的过程。

    ——DecelerateInterpolator:动画从开始到结束,变化率是一个减速的过程。

    ——CycleInterpolator:动画从开始到结束,变化率是循环给定次数的正弦曲线。

    ——AccelerateDecelerateInterpolator:动画从开始到结束,变化率是先加速后减速的过程。

    ——LinearInterpolator:动画从开始到结束,变化率是线性变化。

    ..............

这里给一个简单的实现Interpolator接口的类:

 

import android.view.animation.Interpolator;

public class MyInterpolator implements Interpolator {

private float mFactor;

private int i;

 

public MyInterpolator(int i){

this.i = i;

}

@Override

public float getInterpolation(float input) {

switch(i){

case 1:mFactor = input;

break;

case 2:mFactor = input*input*input;

break;

}

return mFactor;

 

}

}

当初始变量为1的时候,mFactor = input,是一个线性函数,“变化率”是匀速的
当初始变量为2的时候,mFactor = input*input*input,是一个曲线函数,“变化率”呈三次方。

这里需要注意的是,input是一个0.0f~1.0f的浮点类型

从上面看来,自定义一个Interpolator就是用input根据所需构造一个函数出来

比如:这里把初始变量为2的时候,把函数改为:mFactor=3*input。这里给出一个测试出来的效果图


   这两个图所做的动画都是往下移动100的距离,时间都为3000ms.并且同时做。那为什么绿色的花移动距离是紫色花移动距离的3倍呢?这里来分析一下。

   都是以input为变量的一次线性函数,故两者都是匀速运动,此时后者的速度是前者的3倍,所以移动距离也应该是3被。回过头来看,在设置TranslateAniamtion的时候,明明是移动一样的距离啊!这里可以猜测这时设置的距离就不起效果了,也就是Interpolator改变了之前设置的距离。

   现在基本上明白了Interpolator到底是做什么的了!

 

 

分享到:
评论

相关推荐

    Android_动画效果

    - **`interpolator`**:动画的插入器,用于控制动画的速度变化。 - **`fromXScale`/`toXScale`**:动画起始和结束时X轴的伸缩比例。 - **`fromYScale`/`toYScale`**:动画起始和结束时Y轴的伸缩比例。 - **`pivotX`/...

    Android动画案例

    - 插入器控制动画的速度曲线,如`accelerate_decelerate_interpolator`(加速后减速),`accelerate_interpolator`(仅加速),和`decelerate_interpolator`(仅减速)。Android SDK还提供了其他预定义的插入器,...

    android 几种动画

    -- 插入器 --> android:fromXScale="0.0" <!-- 动画开始时 X 轴缩放比例 --> android:toXScale="1.4" <!-- 动画结束时 X 轴缩放比例 --> android:fromYScale="0.0" <!-- 动画开始时 Y 轴缩放比例 --> android:...

    android中图片的缩放,飞入,旋转,渐入特效

    interpolator指定动画插入器,常见的有加速减速插入器accelerate_decelerate_interpolator,加速插入器accelerate_interpolator,减速插入器decelerate_interpolator。 fromXScale,fromYScale,动画开始前X,Y的缩放...

    Android动画学习笔记之补间动画

    interpolator:动画插入器(加速、减速插入器)  repeatCount:动画重复的次数  repeatMode:顺序动画(restart)/倒序动画(reverse)  startOffset:动画之间时间间隔  对于动画的创建一般有两种方式: 第一种是在...

    andrroid中界面的旋转,缩放,飞入,淡入淡出效果

    interpolator指定动画插入器,常见的有加速减速插入器accelerate_decelerate_interpolator,加速插入器accelerate_interpolator,减速插入器decelerate_interpolator。 fromXScale,fromYScale,动画开始前X,Y的缩放...

    Android 页面特效集合源码.rar

    综上所述,"Android 页面特效集合源码"不仅展示了Android动画系统的深度应用,还可能涵盖了自定义组件、布局设计、手势检测等多个方面,对于Android开发者来说是一份宝贵的参考资料。通过研究和学习这个源码,开发者...

    merg和属性动画实例

    在描述中提到的“实现了多个属性动画”,可能包括但不限于淡入淡出、移动、旋转、缩放等各种效果,这些可以通过自定义 interpolator(插值器)和Evaluator(估值器)来进一步定制动画的行为和视觉效果。同时,使用...

    Android 具有伸缩效果的ListView源码.zip

    此外,考虑到性能优化,我们可能会使用差值器(Interpolator)来改变动画的速度曲线,比如AccelerateDecelerateInterpolator,使动画开始和结束时速度较慢,中间速度快,这样看起来更加自然。同时,为了避免不必要的...

    Android开发之图形图像与动画(三)Animation效果的XML实现

    4. `interpolator`: 定义动画的插入器,影响动画的速度曲线。例如,`accelerate_decelerate_interpolator`使得动画先加速后减速,`accelerate_interpolator`和`decelerate_interpolator`分别是单纯的加速和减速。 5....

    浅析Android手机卫士之抖动输入框和手机震动

    查看apiDemos,找到View/Animation/shake找到对应的动画代码,直接拷贝过来 当导入一个项目的时候,报R文件不存在,很多情况是xml...interpolator是插入器,可以定义动画的速度等 调用Animation对象的setInterpolat

    Animatordemo

    二、动画插入器(Interpolator)的使用: 1. `AccelerateInterpolator`:让动画在开始时慢速,然后逐渐加快速度。 2. `DecelerateInterpolator`:与之相反,让动画在开始时快速,然后逐渐减速。 3. `...

    SlideRecyclerView:实现RecyclerView侧滑菜单栏,交互流畅

    动画的时长和速度可以通过调整 interpolator 来控制,以达到最佳用户体验。 4. **处理滑动冲突** RecyclerView通常会与其父视图或其他视图有滑动冲突。为了解决这个问题,我们需要在RecyclerView的滑动事件中处理...

Global site tag (gtag.js) - Google Analytics