View動(dòng)畫的作用對象是View拢驾,它支持4種動(dòng)畫效果噪叙,分別是平移動(dòng)畫(子類:TranslateAnimation,標(biāo)簽:<translate>)、縮放動(dòng)畫(子類:ScaleAnimation钠惩,標(biāo)簽:<scale>)柒凉、旋轉(zhuǎn)動(dòng)畫(子類:RotateAnimation,標(biāo)簽:<rotate>)和透明度動(dòng)畫(子類:AlphaAnimation妻柒,標(biāo)簽:<alpha>)扛拨。
本小節(jié)學(xué)習(xí)平移動(dòng)畫。
一举塔、概念
平移動(dòng)畫绑警,子類:TranslateAnimation,標(biāo)簽:<translate>
它可以使一個(gè)View在水平和豎直方向完成平移的動(dòng)畫效果央渣。
二计盒、實(shí)現(xiàn)
1. XML實(shí)現(xiàn)
<translate>標(biāo)簽常用屬性如下:
android:fromXDelta:x方向上相對于父容器的起始值,比如0芽丹;
android:toXDelta:x方向上相對于父容器的結(jié)束值北启,比如100;
android:fromYDelta:y方向上相對于父容器的起始值拔第;
android:toYDelta:y方向上相對于父容器的結(jié)束值咕村。
//res/anim/translate_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="300"
android:toYDelta="300"
android:duration="3000"
android:repeatCount="2"
/>
//布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="500px"
android:layout_height="500px"
android:layout_marginLeft="100px"
android:background="@color/colorAccent">
<TextView
android:id="@+id/animate_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimary"
android:text="Hello Android!" />
</RelativeLayout>
//代碼,MainActivity
private void translateAnimationXML() {
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate_animation);
mAnimate_tv.setAnimation(translateAnimation);
mAnimate_tv.startAnimation(translateAnimation);
}
private void stopAnimation() {
mAnimate_tv.clearAnimation();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
translateAnimationXML();
}
@Override
protected void onDestroy() {
super.onDestroy();
stopAnimation();
}
2. 代碼實(shí)現(xiàn)
構(gòu)造方法:
public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
參數(shù)說明:
fromXDelta:x方向上相對于父容器的起始值蚊俺,比如0懈涛;
toXDelta:x方向上相對于父容器的結(jié)束值,比如100泳猬;
fromYDelta:y方向上相對于父容器的起始值批钠;
toYDelta:y方向上相對于父容器的結(jié)束值。
//布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="500px"
android:layout_height="500px"
android:layout_marginLeft="100px"
android:background="@color/colorAccent">
<TextView
android:id="@+id/animate_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimary"
android:text="Hello Android!" />
</RelativeLayout>
//代碼得封,MainActivity
private void translateAnimationCode() {
mTranslateAnimation = new TranslateAnimation(0, 300, 0, 300);
mTranslateAnimation.setDuration(3000);
mTranslateAnimation.setRepeatCount(2);
mTranslateAnimation.setFillAfter(true);
mAnimate_tv.setAnimation(mTranslateAnimation);
mAnimate_tv.startAnimation(mTranslateAnimation);
}
private void stopAnimation() {
mAnimate_tv.clearAnimation();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
translateAnimationCode();
}
@Override
protected void onDestroy() {
super.onDestroy();
stopAnimation();
}
三埋心、動(dòng)畫過程監(jiān)聽
通過Animation的setAnimationListener方法可以給View動(dòng)畫添加過程監(jiān)聽。
接口如下:
public static interface AnimationListener {
void onAnimationStart(Animation animation);
void onAnimationEnd(Animation animation);
void onAnimationRepeat(Animation animation);
}
代碼如下:
private void translateAnimationXML() {
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate_animation);
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
Log.d("MainActivity", "zwm, onAnimationStart");
}
@Override
public void onAnimationEnd(Animation animation) {
Log.d("MainActivity", "zwm, onAnimationEnd");
}
@Override
public void onAnimationRepeat(Animation animation) {
Log.d("MainActivity", "zwm, onAnimationRepeat");
}
});
mAnimate_tv.setAnimation(translateAnimation);
mAnimate_tv.startAnimation(translateAnimation);
}