1. 程式人生 > >Android 動畫 - AlphaAnimation漸變動畫

Android 動畫 - AlphaAnimation漸變動畫

AlphaAnimation:透明度漸變動畫

建立AlphaAnimation有兩種方式
XML檔案+Java程式碼
Java程式碼方式
XML檔案+Java程式碼 
這裡是一個完整的Alpha動畫XML動畫的所有屬性 


檔案目錄:res/anim/alpha.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
      android:duration="3000"
      android:fillAfter="true"
      android:fillBefore="false"
      android:fromAlpha="1.0"
      android:interpolator="@android:anim/linear_interpolator"
      android:repeatCount="-1"
      android:repeatMode="restart"
      android:startOffset="2000"
      android:toAlpha="0.3"/>
1
2
3
4
5
6
7
8
9
10
11
android:duration:動畫持續的時長,單位是毫秒
android:fillAfter:動畫結束之後是否保持動畫的最終狀態;true,表示保持動畫的最終狀態
android:fillBefore:動畫結束之後是否保持動畫開始前的狀態;true,表示恢復到動畫開始前的狀態
android:fromAlpha:動畫開始的透明度,取值0.0~1.0,0.0表示完全透明,1.0表示保持原有狀態不變
android:interpolator:動畫插值器。是實現動畫不規則運動的一種方式,後面講到
android:repeatCount:動畫重複的次數。指定動畫重複播放的次數,如果你需要無限迴圈播放,請填寫一個小於0的數值,我一般寫-1
android:repeatMode:動畫重複的Mode,有reverse和restart兩種,效果看後面
android:startOffset:動畫播放延遲時長,就是呼叫start之後延遲多少時間播放動畫
android:toAlpha:動畫最終的透明度,取值和android:fromAlpha一樣
Java程式碼載入XML檔案動畫

     Toast.makeText(XmlViewAnimationActivity.this, "startAnimation", Toast.LENGTH_SHORT).show();
     AlphaAnimation alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(XmlViewAnimationActivity.this, R.anim.alpha);
     mIvImg.startAnimation(alphaAnimation);
1
2
3
4
屬性詳解
android:duration:就不用說了,動畫的持續時長 
左圖:android:fillAfter=”true”    右圖:android:fillBefore=”true” 
 

當fillAfter為true時,動畫結束之後圖片保持了動畫最終的透明度0.3顯示
當fillBefore為true時,動畫結束之後圖片恢復到了原有的透明度1.0顯示
PS:這兩個屬性是相沖突的,設定一個就好了,不建議同時為true存在,經測試同時為true時,fillAfter的優先順序要比fillBefore大,顯示為fillAfter=true的狀態

android:fromAlpha動畫開始時的透明度。沒什麼好講的, 
android:interpolator動畫的插值器。系統預設的是線性插值器@android:anim/linear_interpolator ,不在這裡寫了,下一篇文章詳細寫這個 
android:repeatCount動畫重複的次數。如果你需要指定動畫重複的次數,直接寫次數就好了,如果需要動畫無限迴圈,請寫一個小於0的數,一般寫-1,

android:repeatMode有兩種模式反轉reverse和重新開始restart,看看效果就明白什麼意思了 
  

reverse:動畫是從一開始的1.0漸變成0.3,然後在從0.3漸變為1.0,重複往返
restart:凍哈是從一開始的1.0漸變成0.3,然後圖片從0.3突變為1.0,然後在漸變成0.3,重複往返,
android:startOffset動畫的延遲時長,單位是毫秒

     AlphaAnimation alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(XmlViewAnimationActivity.this, R.anim.alpha);
     mIvImg.startAnimation(alphaAnimation);
1
2
就是當呼叫mIvImg.startAnimation(alphaAnimation);之後延遲的時間

Java程式碼方式建立動畫 
用XML檔案的形式建立會提供設定AlphaAnimation相應的屬性,同樣Java程式碼也提供了相應的方法去設定

   public void startAlphaAnimation(){
        /**
         * @param fromAlpha 開始的透明度,取值是0.0f~1.0f,0.0f表示完全透明, 1.0f表示和原來一樣
         * @param toAlpha 結束的透明度,同上
         */
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.2f);
        //設定動畫持續時長
        alphaAnimation.setDuration(3000);
        //設定動畫結束之後的狀態是否是動畫的最終狀態,true,表示是保持動畫結束時的最終狀態
        alphaAnimation.setFillAfter(true);
        //設定動畫結束之後的狀態是否是動畫開始時的狀態,true,表示是保持動畫開始時的狀態
        alphaAnimation.setFillBefore(true);
        //設定動畫的重複模式:反轉REVERSE和重新開始RESTART
        alphaAnimation.setRepeatMode(AlphaAnimation.REVERSE);
        //設定動畫播放次數
        alphaAnimation.setRepeatCount(AlphaAnimation.INFINITE);
        //開始動畫
        mIvImg.startAnimation(alphaAnimation);
        //清除動畫
        mIvImg.clearAnimation();
        //同樣cancel()也能取消掉動畫
        alphaAnimation.cancel();
   }
--------------------- 
作者:Itgo_Ben 
來源:CSDN 
原文:https://blog.csdn.net/shibin1990_/article/details/51602498 
版權宣告:本文為博主原創文章,轉載請附上博文連結!