【Android】兩種動畫介紹(Tween動畫、Frame動畫)


        Android中的動畫類型有兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化;另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。下面將一一詳細介紹:

       本博客參考自網絡,結合自己一點理解,實為學習之用,不為其他目的。

一,Tween動畫

        又稱“補間動畫”、“中間動畫”,最早接觸Tween類是在學習Flash時候,使用ActionScript做動畫的時候,使用過類Tween。

        Tween動畫主要的功能是在繪制動畫前設置動畫繪制的軌跡,包括時間, 位置 ,等等。但是Tween動畫的缺點是它只能設置起始點與結束點的兩幀,中間過程全部由系統幫我們完成。所以在幀數比較多的游戲開發中是不太會用到它的。
       Tween一共提供了4中動畫的效果

       Scale:縮放動畫
       Rotate:旋轉動畫
       Translate:移動動畫
       Alpha::透明漸變動畫

      Tween與Frame動畫類似都需要在res\anim路徑下創建動畫的 布局文件

   1)Scale動畫

         

/anim/scalelitte.xml

/anim/scalebig.xml

如果在代碼中,加載動畫,而不用xml配置動畫



2)Rotate旋轉動畫



/anim/retateleft.xml

/anim/retateright.xml


 如果在代碼中加載動畫,而不用xml配置,代碼如下


3)Translate移動動畫
/layout/translate.xml

/anim/translate.xml


說明:
代碼中加載動畫:
4 )Alpha:透明漸變動畫

/anim/alpha.xml


說明:
手動加載動畫:
5)綜合動畫

可以將上面介紹的4種動畫設置在一起同時進行播放,那么就須要使用<set>標簽將所有須要播放的動畫放在一起。

這個動畫布局設置動畫同時播放
移動、漸變、旋轉


/anim/all.xml


二,AnimationDrable實現Frame動畫(設計游戲專用,嘎嘎嘎)感謝宣教主分享



/layout/simple.xml


控制幀播放的/anim/animation.xml

      看看內容應該是很好理解的,<animation-list>為動畫的總標簽,這里面放着幀動畫 <item>標簽,也就是說若干<item>標簽的幀 組合在一起就是幀動畫了。<animation-list > 標簽中android:oneshot="false" 這是一個非常重要的屬性,默認為false 表示 動畫循環播放, 如果這里寫true 則表示動畫只播發一次。 <item>標簽中記錄着每一幀的信息android:drawable="@drawable/a"表示這一幀用的圖片為"a",下面以此類推。  android:duration="100" 表示這一幀持續100毫秒,可以根據這個值來調節動畫播放的速度。

這是一個比較簡單的布局文件,應該都能看懂吧。  我主要說一下 最后的這個 ImageView, 它就是用來顯示我們的動畫。 這里使用android:background="@anim/animation"設置這個ImageView現實的背景為一個動畫,動畫資源的路徑為res/anim/animation.xml   ,當然 設置background同樣也可以在代碼中設置。


[java]  view plain copy
  1. imageView.setBackgroundResource(R.anim.animation);  




通過getBackground方法就可以拿到這個animationDrawable對象。


[java]  view plain copy
  1. /**拿到ImageView對象**/  
  2. imageView = (ImageView)findViewById(R.id.imageView);  
  3. /**通過ImageView對象拿到背景顯示的AnimationDrawable**/  
  4. animationDrawable = (AnimationDrawable) imageView.getBackground();  


AnimationDrawable 就是用來控制這個幀動畫,這個類中提供了很多方法。

animationDrawable.start(); 開始這個動畫
animationDrawable.stop(); 結束這個動畫
animationDrawable.setAlpha(100);設置動畫的透明度, 取值范圍(0 - 255)
animationDrawable.setOneShot(true); 設置單次播放
animationDrawable.setOneShot(false); 設置循環播放
animationDrawable.isRunning(); 判斷動畫是否正在播放
animationDrawable.getNumberOfFrames(); 得到動畫的幀數。


宣教主警戒:拖動進度條設置Alpha值的時候 一定要使用     imageView.postInvalidate(); 方法來通知UI線程重繪屏幕中的imageView  否則會看不到透明的效果 。這里切記切記~~


謝謝CSDN博主宣雨松,牛人一枚。以后還會多多向他學習。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM