持续创作,加速成长!这是我参与「掘金日新计划 · 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等等,还是需要大家自己通过代码的方式来实践。