[轉]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