动画总结之 补间动画——缩放效果 初解

ScaleAnimation 用来创建缩放效果的动画,同样也有两种方式创建。

Java 代码 + XML 文件创建

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

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

  • android:fromXScale —— 浮点值。动画开始,在X轴的偏移尺寸,1.0代表没有改变。
  • android:toXScale —— 浮点值。动画结束时,在X轴的便宜尺寸,1.0代表没有改变。
  • android:fromYScale —— 浮点值。动画开始,在Y轴的偏移尺寸,1.0代表没有改变。
  • android:toYScale —— 浮点值。动画结束时,在Y轴的偏移尺寸,1.0代表没有改变。
  • android:pivotX —— 浮点值。指定动画对象被缩放时,要保留的固定X轴的宽度。
  • androd:pivotY —— 浮点值。指定动画对象被缩放时,要保留的固定Y轴的宽度。
  • android:duration —— 动画持续时间
  • android:repeatCount —— 重复次数
  • android:repeatMode —— 重复模式

示例:
anim/anim_scale.xml

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.2"
    android:toXScale="1.5"
    android:fromYScale="0.2"
    android:toYScale="1.5"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="3000"
    android:repeatCount="-1"
    android:repeatMode="reverse">
</scale>

MainActivity.java

public class MainActivity extends Activity {

    private ImageView imageView;
    private Button start, stop;

    private ScaleAnimation 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 = (ScaleAnimation) new AnimationUtils().loadAnimation(this,R.anim.anim_scale);
    }

    @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 代码创建动画

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

  • ScaleAnimation(float fromX, float toX, float fromY, float toY)
  • ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)
  • ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

前两个构造方法中的参数也就不需要多说了,分别和 XML 当中的属性相匹配,终点是第三个构造方法中的后四个参数,他们分别代表:

  • pivotXType:确定 X 轴坐标的类型,有 ABSOLUT 绝对坐标、RELATIVE_TO_SELF 相对于自身坐标、RELATIVE_TO_PARENT 相对于父控件的坐标
  • pivotXValue:X 轴的值,0.5f 表明是以自身这个控件的一半长度为x轴
  • pivotYType:确定 Y 轴坐标的类型,有 ABSOLUT 绝对坐标、RELATIVE_TO_SELF 相对于自身坐标、RELATIVE_TO_PARENT相对于父控件的坐标
  • pivotYValue:Y 轴的值,0.5f 表明是以自身这个控件的一半长度为 Y 轴

示例:

public class MainActivity extends Activity {

    private ImageView imageView;
    private Button start, stop;

    private ScaleAnimation 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 ScaleAnimation(1.0f, 0.5f, 1.0f, 0.5f);
        animation.setDuration(3000);
        animation.setRepeatCount(-1);
        animation.setRepeatMode(Animation.REVERSE);
    }

    @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();
            }
        });
    }
}

更多内容请看这里: