【Android动画九章】-TranslateAnimation(位移动画)
原创
©著作权归作者所有:来自51CTO博客作者徐的张的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一节介绍了AlphaAnimation动画的用法,本节将介绍另一种形式的动画-TranslateAnimation(位移动画)。
public class
TranslateAnimation
extends Animation
java.lang.Object
↳ android.view.animation.Animation
↳ android.view.animation.TranslateAnimation
位移动画也是Animation类的子类,常用构造方法如下:
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)。有四个参数:
fromXDelta:起始X坐标
toXDelta: 结束X坐标
fromYDelta:起始Y坐标
toYDelta: 结束Y坐标
同样可以通过两种方式实现位移动画,通过实例进行演示。
代码方式实现
1.主布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="demo.androidwar.com.translatedemo.MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="center"
android:onClick="translate"
android:text="位移动画"
android:textSize="20sp" />
<ImageView
android:id="@+id/imgview"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher" />
</LinearLayout>
2.MainActivity.java:
package demo.androidwar.com.translatedemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imgview);
}
public void translate(View view) {
TranslateAnimation translateAnimation = new TranslateAnimation(0, 200, 0, 200);
translateAnimation.setDuration(2000);
imageView.setAnimation(translateAnimation);
imageView.startAnimation(translateAnimation);
}
}
构造方法传入了四个参数,分别是X轴起始值、X轴结束值、Y轴起始值和Y轴结束值,其余方法和上一节AlphaAnimation方法一样。运行项目如下:

引入xml的方式实现
1.xml文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="2000"
android:fillAfter="true"
android:fromXDelta="0"
android:fromYDelta="0"
android:repeatCount="3"
android:toXDelta="0"
android:toYDelta="100"
/>
</set>
2.MainActivity.java:
package demo.androidwar.com.translatedemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imgview);
}
public void translate(View view) {
Animation translateAnimation = AnimationUtils.loadAnimation(MainActivity.this,R.anim.translation);
imageView.setAnimation(translateAnimation);
imageView.startAnimation(translateAnimation);
}
}
运行项目如下:

这时你会发现,我们在文件中设置了fillafter属性,但是动画结束后并没有保持住状态,研究后发现,这个属性必须放置在set标签里才起作用,将xml文件代码修改如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="2000"
android:fromXDelta="0"
android:fromYDelta="0"
android:repeatCount="3"
android:toXDelta="0"
android:toYDelta="100" />
</set>
再次运行实例:
