【Android】學習筆記(11)——Animation使用方法(上)

Andriod 的Animations可以從形式上分爲兩大類,分別是 Tweened Animations 和Frame-By-Frame Animations。Tweened Animations可以理解爲補間動畫,也就是某一張圖或者其他對象,進行旋轉、變形等動畫;而Frame-By-Frame Animations是多張圖片或對象,進行一幀一幀的變化。簡單而也,前者是本身改變的動畫,後者是與其他內容的交替顯示形成的動畫。

Tweened Animations有4種樣式,分別爲Alpha,Rotate,Translate,Scale。分別表示漸變,旋轉,位移,縮放。要實現以上4種動畫,必須要給出每種動畫的需要參數。
Alpha:因爲是漸變,所以需要給出改變之前的透明度,改變之後的透明度,總共改變的時間。
Rotate:旋轉,必定要知道旋轉的圓心在哪邊,所以要定義圓心的X與Y軸,以及轉動的時間,轉動的角度等。
Translate:位移,即要知道原來對象的XY軸和改變後的XY軸,以及運動的時間等。
Scale:縮放,首先要知道XY軸縮放的比率,以及縮放前後中心座標的變化,當然還有縮放的時間。
使用Animation還需要知道一些知識點:
Interpolator它定義了動畫的速率,它有若干子類,AccelerateDecelerateInterpolator是兩頭慢,中間快的動畫效果, AccelerateInterpolator是加速的動畫效果,DecelerateInterpolator是減速動畫效果, LinearInterpolator是勻速動畫效果,等等。這些加速效果可以根據實際的需求來使用。
AnimationSet:它是Animation的一個集合,可以將定義好的各個動畫,放入AnimationSet集合中,然後再進行對集合的設置,控制集合內的動畫如何運行。

Tweened Animations的實現

Tweened Animations實現有兩種方式,一種爲在Java代碼中設置,另一種爲在XML文件中設置。兩種方式各有優劣,下面一一介紹。

Tweened Animations的第一種實現:

我們的例子是Activity上有4個按鈕和一張圖片,4個按鈕分別代表上面的四種動畫效果。
佈局文件很簡單,就是4個按鈕和一張圖片的定義設置,在此略去,附件中可見詳情。
在Java代碼中,我們爲每個按鈕綁定了監聽器。
Alpha監聽器:
  1. class AlphaOnClickListener implements OnClickListener{

  2. @Override

  3. publicvoid onClick(View arg0) {

  4. // TODO Auto-generated method stub

  5. AnimationSet animationSet = new AnimationSet(true);//創建一個Animation的集合,這裏構造函數的參數是個boolean值,他表示的是這個AnimationSet中是否共享一個Interpolator,也就是在這個集合內不同的動畫是否以同樣地速率變化,如果爲false,那麼下面需要對每一個動畫進行Interpolator的設置。

  6. AlphaAnimation alphaAnimation = new AlphaAnimation(1,0);//設置從不透明到透明,這裏兩個參數的取值爲0~1,0表示完全透明,1表示完全不透明

  7. alphaAnimation.setDuration(2000);//設置動畫的時間爲2秒

  8. animationSet.addAnimation(alphaAnimation);//將創建的alphaAnimation加入Animation集合中

  9. item.startAnimation(animationSet);//在ImageView上設置動畫

  10. }

  11. }

Rotate監聽器:
  1. class RotateOnClickListener implements OnClickListener{

  2. @Override

  3. publicvoid onClick(View arg0) {

  4. // TODO Auto-generated method stub

  5. AnimationSet animationSet = new AnimationSet(true);//同上

  6. RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

  7. //RotateAnimation有6個參數

  8. //1.初始的角度

  9. //2.旋轉的角度,可以爲負的,即爲逆時針轉

  10. //3.轉的圓心的X座標是相對誰爲參照物的,這裏有3種情況:RELATIVE_TO_SELF,RELATIVE_TO_PARENT,ABSOLUTE,分別是相對自己,相對父控件,絕對位置

  11. //4.具體的X座標,與第三個參數有關,若第3個參數是Animation.RELATIVE_TO_SELF,第四個參數是0.5f,那麼圓心的X座標就是自身控件寬度的0.5倍

  12. //5.轉的圓心的Y座標是相對誰爲參照物,參數同3

  13. //6. 具體的Y座標,與第三個參數有關,若第3個參數是Animation.RELATIVE_TO_SELF,第四個參數是0.5f,那麼圓心的Y座標就是自身控件寬度的0.5倍

  14. rotateAnimation.setDuration(2000);//設置動畫的時間

  15. animationSet.addAnimation(rotateAnimation);//將創建的alphaAnimation加入Animation集合中

  16. item.startAnimation(animationSet);//在ImageView上設置動畫

  17. }

  18. }

Translate監聽器:

  1. class TranslateOnClickListener implements OnClickListener{

  2. @Override

  3. publicvoid onClick(View arg0) {

  4. // TODO Auto-generated method stub

  5. AnimationSet animationSet = new AnimationSet(true);//創建一個Animation的集合

  6. TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,1f);

  7. //第1,2個參數是變化之前的X座標

  8. //第3,4個參數是變化之後的X座標

  9. //第5,6個參數是變化之前的Y座標

  10. //第7,8個參數是變化之後的Y座標

  11. translateAnimation.setDuration(2000);//設置動畫的時間

  12. animationSet.addAnimation(translateAnimation);//將創建的alphaAnimation加入Animation集合中

  13. item.startAnimation(animationSet);//在ImageView上設置動畫

  14. }

  15. }

Scale監聽器:

  1. class ScaleOnClickListener implements OnClickListener{

  2. @Override

  3. publicvoid onClick(View arg0) {

  4. // TODO Auto-generated method stub

  5. AnimationSet animationSet = new AnimationSet(true);//同上

  6. ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f,1,0.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

  7. //第1個參數是X的原始比率,第2個參數是X變化後的比率

  8. //第3個參數是Y的原始比率,第4個參數是Y變化後的比率

  9. //第5,6個參數是最後動畫結束時的X軸座標

  10. //第7,8個參數是最後動畫結束時的Y軸座標

  11. scaleAnimation.setDuration(2000);//設置動畫的時間

  12. animationSet.addAnimation(scaleAnimation);//將創建的alphaAnimation加入Animation集合中

  13. item.startAnimation(animationSet);//在ImageView上設置動畫

  14. }

  15. }

以上是Tweened Animations的基本使用,當然還有其他的設置,比如設置延遲動畫可以使用對Animation或AnimationSet設置setStartOffset(long time)等。

Tweened Animations的第二種實現:

使用XML文件來對動畫進行定義和設置,首先要在res目錄下建立anim文件夾,在這個文件夾下面就放置一個我們定義的XML文件,而且,每個XML文件都是以如下爲標籤:
  1. <?xmlversion="1.0"encoding="UTF-8"?>

  2. <setxmlns:android="http://schemas.android.com/apk/res/android"

  3. android:interpolator="@android:anim/accelerate_interpolator"

  4. >

  5. </set>

我們將要定義的動畫放在set標籤中,裏面的android:interpolator屬性就是定義了這個set中的動畫是以什麼速率進行變化的,它的值是android自帶的,可以再Android API中查到。
看一下上述4中動畫的定義:
  1. <alpha

  2. android:fromAlpha="1.0"//初始透明度

  3. android:toAlpha="0.0"//結束透明度

  4. android:duration="3000"//時長

  5. ></alpha>

  6. <rotate

  7. android:fromDegrees="0"//初始旋轉角度

  8. android:toDegrees="-360"//結束旋轉角度,可爲負,即逆時針

  9. android:duration="3000"//時長

  10. android:pivotX="50%" //下方介紹

  11. android:pivotY="50%"//下方介紹

  12. ></rotate>

  13. <scale

  14. android:fromXScale="1.0"//初始X座標比率

  15. android:toXScale="0.1"//結束X座標比率

  16. android:fromYScale="1.0"//初始Y座標比率

  17. android:toYScale="0.1"//結束Y座標比率

  18. android:pivotX="50%"//下方介紹

  19. android:pivotY="50%"//下方介紹

  20. android:duration="3000"//時長

  21. ></scale>

  22. <translate

  23. android:fromXDelta="0%"//下方介紹

  24. android:toXDelta="50%"//下方介紹

  25. android:fromYDelta="0%"//下方介紹

  26. android:toYDelta="100%"//下方介紹

  27. android:duration="3000"//時長

  28. ></translate>

我們在上面代碼標註“下方介紹”的這些值,我們有三種寫法,如:50,50%,50%p。這三種寫法就分別代表了ABSOLUTE,RELATIVE_TO_SELF和RELATIVE_TO_PARENT。
定義完XML文件後,我們就要在Java代碼中對其使用了。
舉例,若將上面的Alpha的XML文件命名爲alpha.xml,則如此使用:
  1. class AlphaOnClickListener implements OnClickListener{

  2. @Override

  3. publicvoid onClick(View arg0) {

  4. // TODO Auto-generated method stub

  5. Animation alphaAnimation = AnimationUtils.loadAnimation(AnimationDemo2Activity.this, R.anim.alpha);//載入alpha.xml

  6. item.startAnimation(alphaAnimation);//在ImageView上設置動畫

  7. }

  8. }

也可以將多個效果放在一個文件中的一個set內,那麼這幾個動畫會根據自己的設置一起運行,達到對同一個對象的多種效果的疊加效果。

以上是Tweened Animations的兩種基本用法,Animation的使用遠遠不止這些,需要進一步的學習哇。

附件是Tweened Animations的兩種基本用法的示例代碼,僅供參考。

如果我的文章給與了你幫助,就不妨請我喝杯咖啡吧,點擊->btn-index.png
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章