说明:
动画需要在页面窗口初始化完成时才能启动,所以我们可以在onWindowFocusChanged中启动动画,或者使用按钮点击启动动画
使用步骤如下:
在drawable中新建一个xml文件,在其中定义动画,并设置给相应的控件做背景
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/loadanimation_icon1"
android:duration="150"></item>
<item android:drawable="@drawable/loadanimation_icon2"
android:duration="150"></item>
<item android:drawable="@drawable/loadanimation_icon3"
android:duration="150"></item>
<item android:drawable="@drawable/loadanimation_icon4"
android:duration="150"></item>
<item android:drawable="@drawable/loadanimation_icon5"
android:duration="150"></item>
<item android:drawable="@drawable/loadanimation_icon6"
android:duration="150"></item>
<item android:drawable="@drawable/loadanimation_icon7"
android:duration="150"></item>
xml:
android:background="@drawable/anim_frame"/>
java:
/**
* 静态加载缩放
*/
public void setScaleByXml(){
Animation animation= AnimationUtils.loadAnimation(this,R.anim.anim);
tv_content.startAnimation(animation);
}
/**
* 动态加载缩放
*/
public void setScaleByJava(){
ScaleAnimation animation=new ScaleAnimation(0,2,0,2,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
tv_content.startAnimation(animation);
}
/**
* 静态加载translate
*/
public void setTranslateByXml(){
Animation anim=AnimationUtils.loadAnimation(this,R.anim.transfer);
tv_content.startAnimation(anim);
}
/**
* 静态加载frame帧动画,不能再onCreate中加载
* @param hasFocus
*/
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
AnimationDrawable animationDrawable= (AnimationDrawable) iv.getBackground();
animationDrawable.start();
}
/**
* 动态加载frame动画
*/
public void setFrameByJava(){
AnimationDrawable drawable=new AnimationDrawable();
for (int i = 1; i <=7; i++) {
int id=getResources().getIdentifier("loadanimation_icon"+i,"drawable",getPackageName());
Drawable draw= ContextCompat.getDrawable(this,id);
drawable.addFrame(draw,150);
}
drawable.setOneShot(false);
iv.setImageDrawable(drawable);
drawable.start();
}