Android开发-动画 补间动画(Tween Animation)(二)

195 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

上一篇介绍了补间动画的第一种动画形式:AlphaAnimation,主要实现有2种,可以借助xml也可以完全使用java来实现,下面介绍第二种动画效果的实现:ScaleAnimation,也就是缩放动画。

ScaleAnimation 的实现动画效果主要是控制View的尺寸大小,进行展示View的效果。

同样它也支持xml+java的实现和纯java的实现方式。

1、xml+java的实现
ScaleAnimation 主要有以下几种属性:
1)fromXScale:动画开始前在X坐标的大小。
2)fromYScale:动画开始前在Y坐标的大小。
3)toXScale:动画结束后在X坐标的大小。
4)toYScale:动画结束后在Y坐标的大小。
5)pivotX:缩放中心点的X坐标。
6)pivotY:缩放中心点的Y坐标。

新建一个xml,scale_anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="2000">
    <scale
        android:fromXScale="100%"
        android:fromYScale="100%"
        android:pivotX="30%"
        android:pivotY="30%"
        android:toXScale="300%"
        android:toYScale="300%"/>
</set>

通过java代码来执行动画的:

public class MainActivity extends Activity{
private ScaleAnimation scaleAnimation;
private ImageView scaleImage;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        scaleImage = findViewById(R.id.image_scale);
        scaleAnimation = (ScaleAnimation) (ScaleAnimation)AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale_anim);
        scaleImage.startAnimation(scaleAnimation);
    }
}

1、纯java的实现方式:

// 以view中心为缩放点,由初始状态放大两倍
ScaleAnimation scaleAnimation = new ScaleAnimation(
        1.0f, 2.0f, 1.0f, 2.0f,
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f
);
scaleAnimation.setDuration(2000);
scaleImage.startAnimation(scaleAnimation);

ScaleAnimation 的8个构造参数说明: mFromX:X轴的起始大小;
mToX:X轴的结束大小;
mFromY:Y轴的起始大小;
mToY:Y轴的结束大小;
mPivotXType:缩放中心点的X坐标类型,它的取值范围:ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT;
mPivotXValue:缩放中心点的X坐标值,它的取值类型有3类,百分比,数值,还有百分比+p,最后一种了解,前面的2种,百分比意思就是相对于自己控件宽度的百分比;数值的意思就是多少像素; mPivotYType:缩放中心点的Y坐标类型,它的取值范围和X轴的一样;
mPivotYValue:缩放中心点的Y坐标;取值同X轴的值。

简单举2个栗子:
1、如果想以左上角为起点,放大当前的view2倍,那么mPivotXValue和mPivotYValue取值就是0,0,mPivotXValue和mPivotYType取值都是Animation.RELATIVE_TO_SELF,mFromX和mFromY都是1.0,mToX和mToY都是2.0; 代码如下:

// 以view左上角为缩放点,由初始状态放大两倍
ScaleAnimation scaleAnimation = new ScaleAnimation(
        1.0f, 2.0f, 1.0f, 2.0f,
        Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f
);
scaleAnimation.setDuration(2000);
scaleImage.startAnimation(scaleAnimation);

2、如果想以自己中心点为起点,进行缩放就是上面java的代码,就不多重复了

以上就是ScaleAnimation的大概使用方式,还有几个和其他动画一样的属性就没有介绍了,像repeatCount,repeatMode等等,还是需要大家自己通过代码的方式来实践。