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()方法来实现,但是还是有不足,得改变焦点才能触发,虽然理论可以自动实现改变焦点,感觉还是不甚可取。


原文地址:http://www.cnblogs.com/zealotrouge/articles/2562118.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值