Android Interpolator(插值器)的介绍和使用

来源:互联网 发布:matlab中矩阵归一化 编辑:程序博客网 时间:2024/05/13 21:06

一、Interpolator 时间插值类,定义动画变换的速度。能够实现alpha/scale/translate/rotate动画的加速、减速和重复等。Interpolator类其实是一个空接口,继承自TimeInterpolator,TimeInterpolator时间插值器允许动画进行非线性运动变换,如加速和限速等,该接口中只有接口中有一个方法float getInterpolation(float input)这个方法。传入的值是一个0.0~1.0的值,返回值可以小于0.0也可以大于1.0。
默认值:accelerate_decelerate_interpolator。
一共有九种:
1.AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
2.AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
3.AnticipateInterpolator 开始的时候向后甩一点然后向前
4.AnticipateOvershootInterpolator 开始的时候向后甩一点然后向前超过设定值一点然后返回
5.BounceInterpolator 动画结束的时候弹起,类似小球落地
6.CycleInterpolator 动画循环播放特定的次数回到原点,速率改变沿着正弦曲线
7.DecelerateInterpolator 在动画开始的地方快然后慢
8.LinearInterpolator 以常量速率改变
9.OvershootInterpolator 向前超过设定值一点然后返回到原来位置

二、1.AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速

这里写图片描述

2.AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速

这里写图片描述

3.AnticipateInterpolator 开始的时候向后甩一点然后向前

这里写图片描述

4.AnticipateOvershootInterpolator 开始的时候向后甩一点然后向前超过设定值一点然后返回

这里写图片描述

5.BounceInterpolator 动画结束的时候弹起,类似小球落地

这里写图片描述

6.CycleInterpolator 动画循环播放特定的次数回到原点,速率改变沿着正弦曲线

这里写图片描述

7.DecelerateInterpolator 在动画开始的地方快然后慢

这里写图片描述

8.LinearInterpolator 以常量速率改变

这里写图片描述

9.OvershootInterpolator 向前超过设定值一点然后返回到原来位置

这里写图片描述

三、
xml中使用:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.administrator.interpolatordemo.MainActivity">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="200dp">        <ImageView            android:id="@+id/iv"            android:layout_width="50dp"            android:layout_height="50dp"            android:layout_centerVertical="true"            android:layout_marginLeft="50dp"            android:background="@drawable/image" />    </RelativeLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp"        android:orientation="horizontal">        <Button            android:id="@+id/btn1"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="AccelerateDecelerate" />        <Button            android:id="@+id/btn2"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="Accelerate" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp"        android:orientation="horizontal">        <Button            android:id="@+id/btn3"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="Anticipate" />        <Button            android:id="@+id/btn4"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="AnticipateOvershoot" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp"        android:orientation="horizontal">        <Button            android:id="@+id/btn5"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="Bounce" />        <Button            android:id="@+id/btn6"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="Cycle" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp"        android:orientation="horizontal">        <Button            android:id="@+id/btn7"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="Decelerate" />        <Button            android:id="@+id/btn8"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="Linear" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp"        android:orientation="horizontal">        <Button            android:id="@+id/btn9"            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp"            android:text="Overshoot" />        <TextView            android:layout_width="0dp"            android:layout_height="50dp"            android:layout_margin="4dp"            android:layout_weight="1"            android:gravity="center"            android:padding="5dp" />    </LinearLayout></LinearLayout>

MainActivity中:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private ImageView imageView;    private Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        imageView = (ImageView) findViewById(R.id.iv);        btn1 = (Button) findViewById(R.id.btn1);        btn2 = (Button) findViewById(R.id.btn2);        btn3 = (Button) findViewById(R.id.btn3);        btn4 = (Button) findViewById(R.id.btn4);        btn5 = (Button) findViewById(R.id.btn5);        btn6 = (Button) findViewById(R.id.btn6);        btn7 = (Button) findViewById(R.id.btn7);        btn8 = (Button) findViewById(R.id.btn8);        btn9 = (Button) findViewById(R.id.btn9);        btn1.setOnClickListener(this);        btn2.setOnClickListener(this);        btn3.setOnClickListener(this);        btn4.setOnClickListener(this);        btn5.setOnClickListener(this);        btn6.setOnClickListener(this);        btn7.setOnClickListener(this);        btn8.setOnClickListener(this);        btn9.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.btn1:                AccelerateDecelerateInterpolator accelerateDecelerateInterpolator = new AccelerateDecelerateInterpolator();                showTranslate(accelerateDecelerateInterpolator);                break;            case R.id.btn2:                AccelerateInterpolator accelerateInterpolator = new AccelerateInterpolator();                showTranslate(accelerateInterpolator);                break;            case R.id.btn3:                AnticipateInterpolator anticipateInterpolator = new AnticipateInterpolator();                showTranslate(anticipateInterpolator);                break;            case R.id.btn4:                AnticipateOvershootInterpolator anticipateOvershootInterpolator = new AnticipateOvershootInterpolator();                showTranslate(anticipateOvershootInterpolator);                break;            case R.id.btn5:                BounceInterpolator bounceInterpolator = new BounceInterpolator();                showTranslate(bounceInterpolator);                break;            case R.id.btn6:                //参数:循环次数                CycleInterpolator cycleInterpolator = new CycleInterpolator(2);                showTranslate(cycleInterpolator);                break;            case R.id.btn7:                DecelerateInterpolator decelerateInterpolator = new DecelerateInterpolator();                showTranslate(decelerateInterpolator);                break;            case R.id.btn8:                LinearInterpolator linearInterpolator = new LinearInterpolator();                showTranslate(linearInterpolator);                break;            case R.id.btn9:                OvershootInterpolator overshootInterpolator = new OvershootInterpolator();                showTranslate(overshootInterpolator);                break;        }    }    private void showTranslate(Interpolator interpolator) {        //创建平移动画对象        TranslateAnimation translateAnimation = new TranslateAnimation(                //参数:Animation.RELATIVE_TO_SELF(先对自身)                //Animation.RELATIVE_TO_PARENT(相对父容器)                Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_PARENT, 0.5f,                Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_PARENT, 0        );        //设置持续的时间        translateAnimation.setDuration(2000);        //设置循环的次数        translateAnimation.setRepeatCount(0);        //设置重复的模式,Animation.REVERSE:会进行一次倒序播放        translateAnimation.setFillAfter(true);        //设置插值器        translateAnimation.setInterpolator(interpolator);        //设置动画        imageView.startAnimation(translateAnimation);    }}

demo地址:

http://download.csdn.net/detail/afanbaby/9877973

本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,希望大家一起学习进步!

阅读全文
1 0