[转]Android动画背景图自动播放的实现


我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,通常使用…. 来实现。

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

目前我知道的有三种方法:

ImageView   imageView  =  ( ImageView ) findViewById ( R . id . xxx ) ;

方法一:使用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返回
    
}
} ;

以上三种方法经过测试没有问题,另外网上有一些说使用重写Activity的onWindowFocusChanged()方法来实现,但是还是有不足,得改变焦点才能触发,虽然理论可以自动实现改变焦点,感觉还是不甚可取。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM