动画总结之 补间动画——位移效果 初解

TranslateAnimation 用来创建位移效果的动画,同样也有两种方式创建。

Java 代码 + XML 文件创建

同样的,我们可以在 XML 当中描述一些属性,然后再在 Java 代码中实例化该动画对象。

TranslateAnimation 的属性都包含在 <translate> 标签当中,可用的属性有:

  • android:fromXDelta —— 浮点值或百分比,它设定了动画开始时X轴的偏移量,既可以是相对与普通位置的像素值(如5),也可以是相对与元素自身宽度的百分比(如5%),还可以是相对于父窗口宽度的百分比(如5%p)。
  • android:toXDelta —— 浮点值或百分比,它设定了动画结束时X轴的偏移量,既可以是相对与普通位置的像素值(如5),也可以是相对与元素自身宽度的百分比(如5%),还可以是相对于父窗口宽度的百分比(如5%p)。
  • android:fromYDelta —— 浮点值或百分比,它设定了动画开始时Y轴的偏移量,既可以是相对与普通位置的像素值(如5),也可以是相对与元素自身宽度的百分比(如5%),还可以是相对于父窗口宽度的百分比(如5%p)。
  • android:toYDelta —— 浮点值或百分比,它设定了动画结束时X轴的偏移量,既可以是相对与普通位置的像素值(如5),也可以是相对与元素自身宽度的百分比(如5%),还可以是相对于父窗口宽度的百分比(如5%p)。
  • android:duration —— 动画持续时间
  • android:repeatCount —— 重复次数
  • android:repeatMode —— 重复模式

示例:
anim/anim_translate.xml

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="-320"
    android:toXDelta="320"
    android:fromYDelta="0"
    android:toYDelta="0"
    android:duration="300"
    android:repeatCount="5"
    android:repeatMode="reverse"
    />

MainActivity.java

public class MainActivity extends Activity {

    private ImageView imageView;
    private Button start, stop;

    private TranslateAnimation animation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.gif);
        start = findViewById(R.id.startAnimation);
        stop = findViewById(R.id.stopAnimation);

        animation = (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.anim_translate);
    }

    @Override
    protected void onStart() {
        super.onStart();
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imageView.startAnimation(animation);//启动动画
            }
        });

        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                animation.cancel();//取消动画
                imageView.clearAnimation();
            }
        });
    }
}

Java 代码创建动画

通过三个构造方法可以创建出 TranslateAnimation 对象:

  • TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
  • TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)

第一个构造方法中的参数也就不需要多说了,分别和 XML 当中的属性相匹配,重点是第二个构造方法中的 XXXType,它其实和 ScaleAnimation 当中的 pivotYType 类似,都是确定坐标类型的,有 ABSOLUT 绝对坐标、RELATIVE_TO_SELF 相对于自身坐标、RELATIVE_TO_PARENT 相对于父控件的坐标几个选项

示例:

public class MainActivity extends Activity {

    private ImageView imageView;
    private Button start, stop;

    private TranslateAnimation animation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.gif);
        start = findViewById(R.id.startAnimation);
        stop = findViewById(R.id.stopAnimation);

        animation = new TranslateAnimation(-320, 320, 0, 0);
        animation.setDuration(3000);
        animation.setRepeatCount(-1);
        animation.setRepeatMode(Animation.REVERSE);
        animation.setStartOffset(1000);
    }

    @Override
    protected void onStart() {
        super.onStart();
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imageView.startAnimation(animation);//启动动画
            }
        });

        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                animation.cancel();//取消动画
                imageView.clearAnimation();
            }
        });
    }
}

更多内容请看这里: