您的位置:首页 > 移动开发 > Android开发

Android动画背景自动播放

2016-02-20 17:20 531 查看
我们在开发android应用的时候,会遇到加载anim帧动画的图片,其中遇到最多的就是加载图片时候显示动态图,最常见的使用方法就是,设置背景为anim动画,如以下代码:

<?xml version="1.0" encoding="utf-8"?>
<animation-list android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:duration="150" android:drawable="@mipmap/ic_loading0" />
<item android:duration="150" android:drawable="@mipmap/ic_loading1" />
<item android:duration="150" android:drawable="@mipmap/ic_loading2" />
<item android:duration="150" android:drawable="@mipmap/ic_loading3" />
<item android:duration="150" android:drawable="@mipmap/ic_loading4" />
<item android:duration="150" android:drawable="@mipmap/ic_loading5" />
</animation-list>


不过大多数朋友都会遇到的问题是,动画做好了,但是加载的时候,动画并不会自动播放,还得通过屏幕点击等事件来触发,那么如何解决呢?实际上,android的动画AnimationDrawable 组件里面有个start()方法用于启动动画播放,但是这个方法不能直接写在onClick,onStart,onResume里面,写进去也是无效的,无法启动动画,只能写在比如事件监听当中,于是我们可以使用点小技巧来实现自动播放

我从网上搜集的资料整理了以下三种方法:

方法一:使用Runnalbe()来加载

imageView.setBackgroundResource(R.anim.xxxxx);
final AnimationDrawable animationDrawable =(AnimationDrawable)imageView.getBackground();
imageView.post(new Runnable() {
@Override
public void run()  {
animationDrawable.start();
}
});
方法二:使用AsyncTask异步加载启动

imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
RunAnim runAnim=new RunAnim();
runAnim.execute("");

class RunAnim extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
if (!animationDrawable.isRunning()) {
animationDrawable.stop();
animationDrawable.start();
}
return "";
}
}
方法三:通过添加addOnPreDrawListener来自动加载

imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);

OnPreDrawListener preDrawListener = new OnPreDrawListener(){
@Override
public boolean onPreDraw() {
animationDrawable.start();
return true; //必须要有这个true返回
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: