ScaleAnimation 用来创建缩放效果的动画,同样也有两种方式创建。
同样的,我们可以在 XML 当中描述一些属性,然后再在 Java 代码中实例化该动画对象。
ScaleAnimation 的属性都包含在 <scale>
标签当中,可用的属性有:
示例:
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();
}
});
}
}
通过三个构造方法可以创建出 ScaleAnimation 对象:
前两个构造方法中的参数也就不需要多说了,分别和 XML 当中的属性相匹配,终点是第三个构造方法中的后四个参数,他们分别代表:
ABSOLUT
绝对坐标、RELATIVE_TO_SELF
相对于自身坐标、RELATIVE_TO_PARENT
相对于父控件的坐标ABSOLUT
绝对坐标、RELATIVE_TO_SELF
相对于自身坐标、RELATIVE_TO_PARENT
相对于父控件的坐标示例:
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();
}
});
}
}
更多内容请看这里: