个人登录
数狐在线-做最好的在线学习社区java c# liferay jsp
android Interpolator使用指南
    2017-8-5    作者:  androidFan      进入评论页
public interface Interpolator
implements TimeInterpolator
AccelerateDecelerateInterpolator,
AccelerateInterpolator,
AnticipateInterpolator,
AnticipateOvershootInterpolator,
BaseInterpolator,BounceInterpolator,
CycleInterpolator,DecelerateInterpolator,
FastOutLinearInInterpolator,
FastOutSlowInInterpolator,
LinearInterpolator,
LinearOutSlowInInterpolator,
OvershootInterpolator,
PathInterpolator
定义了动画的属性值范围,可以形成基本的动态效果,例如透明度,大小,切换,翻转等等,对这些可以进行加速,减速,或者重复等等。
abstract getInterpolation(float input) - 是一组映射,动画的旧比例分数设置到动画的新比例分数设置。

我们有的时候是需要生成自己的定制化interpolators,正如我们了解的,View动画系统提供了许多设置好的,可以直接使用的
interpolators,但是在很多情况下,我们还是需要实现效果的细微的区别,因此我们需要自己的interpolators.

在实现一个interpolator的时候,我们必须明白interpolator可以为我们做什么?动画是在一个开始时间点与结束时间点之间进行运行的
因此动画的每个帧都可以被设置一个特定的开始时间与结束时间,而需要的浮点数的范围在0.1到1.0之间,这里的0.1代表动画的开始时间
而1.0则代表动画的结束,最简单的例子里,该数值用来做对象的切换,在切换的例子中0.1代表开始,0.5代表中间,而1.0则代表结束。
这正是Linear Interpolator实现的功能。而30%的时间,该视图则按照既定的路径移动


通常情况下,时间索引没有必要直接换算成切换的具体进度,我们可以把时间索引0.0到1.0直接变成另外的一对数字,但是这不改变既定的
理论,这正是interpolator需要做的工作。


这里的y是interpolator的输出结果,t则是表示时间指数,加速interpolator可以使用一个参数来进行自定义设置,通常可以用上面的
公式来表示,这里的f则是一个强调值,该值可以增加加速的程度,f的值越大,加速度的效果则越明显。

自定义interpolator
很多情况下interpolator都可以使用xml资源文件来进行定制,或者通过编码的方式来完成定制,如果想用xml资源定制一个interpolator
你需要在/res/anim 目录下生成一个新的xml文件,加入我们想修改加速interpolator我们想把f设置为2,我们需要在/res/anim/下
生成一个my_accelerate_interpolator.xml文件。

<?xml version="1.0" encoding="utf-8"
<accelerateInterpolator
     xmlns:android="http://schema.android.com/apk/res/android"
     android:factor="2"

一旦文件生成以后,你可以使用下面的语法来对该文件进行引用:
@anim/my_accelerate_interpolator

如果你想定义一个拉伸的动画,你可以使用类似的设置
<scale xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@anim/my_accelerate_interpolator"
       android:fromXScale="0.0"
       android:toXScale="1.0"
       android:fromYScale="0.0"
       android:toYScale="1.0"
       android:duration="300" />


Linear Interpolator

class:LinearInterpolator
Resource id: @android:anim/Linear_interpolator
Tag:LinearInterpolator
Formula:y=t
构造函数:public LinearInterpolator()
属性:无



Accelerate Interpolator
class: AccelerateInterpolator
Resource id : @android:anim/accelerate_interpolator
Tag:accelerateInterpolator
Formula:
构造函数 : AccelerateInterpolator(float factor)
参数:
       name:f
       attribute: android:factor
       description:加速系数
      一个大数值可以引起更慢的启动和更快的加速,以完成整个动画过程。



Decelerate Interpolator

class:DecelerateInterpolator
Resource id:@android:anim/decelerate_interpolator
tag:decelerateInterpolator
公式:

描述:初始速度快,但是加速度慢


Accelerate Decelerate Interpolator

class:AccelerateDecelerateInterpolator
Resource id : @android:anim/accelerate_decelerate_interpolator
tag:accelerateDecelerateInterpolator



Bounce Interpolator

class:BounceInterpolator
Resource id :@android:anim/bounce_interpolator
tag:bounceInterpolator




Anticipate Interpolator
class : AnticipateInterpolator
resource id:@android:anim/anticipate_interpolator
tag:anticipateInterpolator
公式:


参数:
   name:T
   attribute:android:android:tension
  描述:tension会让初始的曲线路径更短



Cycle Interpolator
class:CycleInterpolator
resource id : @android:anim/cycle_interpolator
tag : cycleInterpolator
公式:



参数:
    name:C
    属性:android:cycles
   描述:默认的线条数,默认为1



生成自己的Interpolator

现在的例子是生成一个自定义的interpolator正如前面的讨论,interpolator本质上是一个公式的应用,因此你只需要实现
Interpolator接口就可以,该接口只有一个方法getInterpolation(float t)假设我想生成一个曲线路径,然后在加速前速度变慢
等,我们设计的公式:


然后我们实现接口Interpolator:
  public class HesitateInterpolator implements Interpolator{
   public HesitateInterpolator(){
      float x=2.0f*t-1.0f;
      return 0.5f*(x*x*x+1.0f);
  }
}
为了使用你自定义的interpolator你需要在代码里添加:
ScaleAnimation scale=new ScaleAnimation(0.0f,1.0f,0.0f,1.0f);
scale.setInterpolator(new HesitateInterpolator());











官方微信服务号
进入评论页
合作企业