Android动画背景图自动播放的实现
我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,通常使用…. 来实现。 例如:
<?xml version="1.0" encoding="utf-8"?>
<animation-list android:oneshot="false"
xmlns:andro>
@Override
public void run() {
animationDrawable.start();
}
});
注意:此处一定要用getBackground();不能用getdrawable()方法,会没效果。原因如下:
由于我们使用的是imageView的setBackgroundResource方法设置的资源背景,相当于布局文件中的android:background属性,这个属性是view类的属性,必须通过getBackground()方法来获取;而getdrawable()是imageview类的方法,必须通过在代码中setImageResource(int)(对应布局文件的android:src)或setImageDrawable(Drawable
drawable)方法设置才可以使用getdrawable()方法。
(详情参考帖子:http://www.eoeandroid.com/forum. ... 1&extra=#pid1627412)
方法二:使用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();
//注意这里,如果你的图片控件用的是setImageResource
,你这里应该使用getDrawable();
imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);
OnPreDrawListener preDrawListener = new OnPreDrawListener(){
@Override
public boolean onPreDraw() {
animationDrawable.start();
return true; //必须要有这个true返回
}
};
以上三种方法经过测试没有问题,另外网上有一些说使用重写Activity的onWindowFocusChanged()方法来实现,但是还是有不足,得改变焦点才能触发,虽然理论可以自动实现改变焦点,感觉还是不甚可取。
(http://www.toplee.com/blog/1345.html)
Android动画背景图自动播放的实现
我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,通常使用…. 来实现。 例如:
<?xml version="1.0" encoding="utf-8"?>
<animation-list android:oneshot="false"
xmlns:andro>
@Override
public void run() {
animationDrawable.start();
}
});
注意:此处一定要用getBackground();不能用getdrawable()方法,会没效果。原因如下:
由于我们使用的是imageView的setBackgroundResource方法设置的资源背景,相当于布局文件中的android:background属性,这个属性是view类的属性,必须通过getBackground()方法来获取;而getdrawable()是imageview类的方法,必须通过在代码中setImageResource(int)(对应布局文件的android:src)或setImageDrawable(Drawable
drawable)方法设置才可以使用getdrawable()方法。
(详情参考帖子:http://www.eoeandroid.com/forum. ... 1&extra=#pid1627412)
方法二:使用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();
//注意这里,如果你的图片控件用的是setImageResource
,你这里应该使用getDrawable();
imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);
OnPreDrawListener preDrawListener = new OnPreDrawListener(){
@Override
public boolean onPreDraw() {
animationDrawable.start();
return true; //必须要有这个true返回
}
};
以上三种方法经过测试没有问题,另外网上有一些说使用重写Activity的onWindowFocusChanged()方法来实现,但是还是有不足,得改变焦点才能触发,虽然理论可以自动实现改变焦点,感觉还是不甚可取。
(http://www.toplee.com/blog/1345.html)