TranslateAnimation 用来创建位移效果的动画,同样也有两种方式创建。
同样的,我们可以在 XML 当中描述一些属性,然后再在 Java 代码中实例化该动画对象。
TranslateAnimation 的属性都包含在 <translate>
标签当中,可用的属性有:
示例:
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();
}
});
}
}
通过三个构造方法可以创建出 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();
}
});
}
}
更多内容请看这里: