Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android視圖動畫屬性

Android視圖動畫屬性

編輯:關於Android編程

我們有時候通過動畫,去把一個視圖包裝的精美一些。讓其增加好感。 android動畫包含視圖動畫和屬性動畫。在這裡對視圖動畫做一下常用到屬性的記錄。

從上圖中可以看出 Animation 包含 alpha、scale、translate、rotate。我們可以通過 xml的方式 和 代碼的的方式去設置一個動畫或者一個動畫的集合。

 

Animation


可以看到 AlphaAnimation、TranslateAnimation、RotateAnimation、ScaleAnimation、AnimationSet 都是繼承與Animation 。對於它的屬性子類就可以使用。
其定義的屬性有 :

 


        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
        
        
        
            
            
            
            
        
        
        
            
            
            
            
            
            
        
        
        
        
        
    

可能用到屬性的大致意思 :

屬性 含義 android:interpolator 插值器,可以設置動畫速率的變化,比如加速、減速、與加速等等。需要指定 Interpolator資源 android:fillEnabled 設置為true時,android:fillBefore的值才有效,否則android:fillBefore會被忽略 android:fillBefore 設置為true時,待動畫執行完成後,會回到動畫執行前的狀態。默認為 true android:fillAfter 設置為 true時,待動畫執行完成後,會停留在最後的狀態視圖。默認為false;如果是動畫集合 需要在 標簽中設置該屬性才有效 android:duration 動畫從開始到執行完成所花費的時間(單位:毫秒值) android:startOffset 設置動畫在執行之前需要等待的時間(單位:毫秒值),若是重復執行,則每次執行都需要等待 android:repeatCount 設置動畫重復執行的次數。默認值為0.既不重復;可設置為 -1 或 INFINITE (int INFINITE = -1),表示無線重復 android:repeatMode 設置動畫的重復執行的模式,可以設置為以下兩個值
  • restart 動畫從開始重復執行,默認值reverse 動畫反方向重復
android:zAdjustment 表示被設置動畫的內容在動畫運行時在Z軸上的位置,取值為以下三個值之一:
  • normal 默認值,保持內容在Z軸上的位置不變top 保持在Z周最上層bottom 保持在Z軸最下層
android:detachWallpaper 設置是否在壁紙上運行,只對設置了壁紙背景的窗口動畫(window animation)有效。設為true,則動畫只在窗口運行,壁紙背景保持不變



android:interpolator

??通過interpolator可以定義動畫速率變化的方式,比如加速、減速、勻速等,每種interpolator都是 Interpolator 類的子類,Android系統已經實現了多種interpolator,對應也提供了公共的資源ID,如下表:

Interpolator class Resource ID Description AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 在動畫開始與結束的地方速率變換比較慢,在中間的時候加速 AccelerateInterpolator @android:anim/accelerate_interpolator 在動畫開始的時候速率比較慢,然後開始加速 AnticipateInterpolator @android:anim/anticipate_interpolator 開始的時候向後然後向前甩 AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator 開始的時候向後然後向前甩一定值後返回最後的值 BounceInterpolator @android:anim/bounce_interpolator 動畫結束的時候彈起 CycleInterpolator @android:anim/bounce_interpolator 動畫循環播放特定的次數,速率改變沿著正弦曲線 DecelerateInterpolator @android:anim/decelerate_interpolator 在動畫開始的地方快然後慢 LinearInterpolator @android:anim/decelerate_interpolator 以常量速率改變 OvershootInterpolator @android:anim/overshoot_interpolator 向前甩一定值後再回到原來位置

如果系統提供的以上 Interpolator不符合效果的話,也可以通過自定義。有如下二種方式 :

直接繼承 Interpolator 或者其子類 通過自定義Xml文件,可以更改上面 Interpolator屬性。
??-注意,自定的 Xml文件需要存放於res/anim/目錄下。跟標簽與上面相應。 Interpolator class Description < accelerateDecelerateInterpolator > 在動畫開始與結束時速率改變比較慢,在中間的時候加速。沒有可以更改設置屬性。 < accelerateInterpolator > 在動畫開始時速率比較慢,然後開始加速。有一個屬性可以設置加速的速率
  • android:factor 浮點值,加速的速率,默認為1
< anticipateInterpolator > 動畫開始的時候向後然後往前拋。有一個屬性設置向後拉的值
  • android:tension 浮點值,向後的拉力,默認為2,當設為0時,則不會有向後的動畫了
< anticipateOvershootInterpolator > 動畫開始的時候向後然後向前拋,會拋超過目標值後再返回到最後的值。可設置兩個屬性
  • android:tension 浮點值,向後的拉力,默認為2,當設為0時,則不會有向後的動畫了android:extraTension 浮點值,拉力的倍數,默認為1.5(2*1.5),當設為0時,則不會有拉力了
< bounceInterpolator > 動畫結束的時候會彈跳。沒有可更改設置的屬性 < cycleInterpolator > 動畫循環做周期運動,速率改變沿著正弦曲線。有一個屬性設置循環次數
  • android:cycles 整數值,循環的次數,默認為1
< decelerateInterpolator > 在動畫開始時速率改變比較快,然後開始減速。有一個屬性設置減速的速率
  • android:factor 浮點值,減速的速率,默認為1
< linearInterpolator > 動畫勻速播放。沒有可更改設置的屬性 < overshootInterpolator > 動畫向前拋,會拋超過最後值,然後再返回。有一個屬性
  • android:tension 浮點值,超出終點後的拉力,默認為2



通過setAnimationListener()可以對動畫進行監聽。從而實現多個動畫的接連播放。

public void setAnimationListener(AnimationListener listener) ;

//三種時間狀態下的監聽回調
public static interface AnimationListener {
          //開始
        void onAnimationStart(Animation animation);

         //結束
        void onAnimationEnd(Animation animation);

         //重復
        void onAnimationRepeat(Animation animation);
    }

 

AlphaAnimation


AlphaAnimation對應Xml的 < alpha> 標簽,可以實現透明度漸變的動畫效果,也就是淡入淡出的效果。其定義的屬性有:

 

    
        
        
    
屬性 含義 android:fromAlpha 動畫開始時的透明度,0.0為全透明,1.0為不透明,默認為1.0 android:toAlpha 動畫結束時的透明度,0.0為全透明,1.0為不透明,默認為1.0 當設置開始時透明度為0.0,結束時為1.0,就能實現淡入效果;相反,當設置開始時透明度為1.0,結束時為0.0,那就能實現淡出效果。示例代碼如下:
setAlphaType(1, 0);

private void setAlphaType(float fromAlpha, float toAlpha){
        AlphaAnimation animation = new AlphaAnimation(fromAlpha, toAlpha);
        animation.setDuration(1800) ;
        animation.setRepeatMode(Animation.REVERSE) ;
        animation.setRepeatCount(2) ;
        tv.startAnimation(animation) ;
    }
如果是加載寫好的 Xml
****.startAnimation(AnimationUtils.loadAnimation(this, R.anim.****));
運行如下 :

 

TranslateAnimation


TranslateAnimation對應Xml的 < translate> 標簽,可以實現位置移動的動畫效果,可以是垂直方向的移動,也可以是水平方向的移動。其定義屬性有:

 

 
        
        
        
        
    
屬性 含義 android:fromXDelta 起始位置的X坐標的偏移量 android:toXDelta 結束位置的X坐標的偏移量 android:fromYDelta 起始位置的Y坐標的偏移量 android:toYDelta 結束位置的Y坐標的偏移量 坐標的值可以有三種格式 : 類中字段 xml中字段 描述 Animation.ABSOLUTE 直接寫數字 如 :100 表示相對於 View本身的具體像素值 Animation.RELATIVE_TO_SELF 以 % 結束 如:50% 表示相對於 View本身的百分比位置 Animation.RELATIVE_TO_PARENT 以 p%結束 如:50P% 表示相對於View的父View的百分比位置 以下代碼為絕度像素[100,100],相對於自身為 3倍自身,相對於父控件 1倍。
setTranslateType(Animation.ABSOLUTE,0,100,0,100);
setTranslateType(Animation.RELATIVE_TO_SELF,0,3,0,3);
setTranslateType(Animation.RELATIVE_TO_PARENT,0,1,0,1);
運行結果如下 :

 

RotateAnimation


AlphaAnimation對應Xml的 < rotate> 標簽,可以實現旋轉的動畫效果。其定義屬性有 :

 

 
        
        
        
        
    
屬性 含義 android:fromDegrees 旋轉開始的角度 android:toDegrees 旋轉結束的角度 android:pivotX 旋轉中心點的X坐標 android:pivotY 旋轉中心點的Y坐標 旋轉中心坐標的值可以有三種格式 : 類中字段 xml中字段 描述 Animation.ABSOLUTE 直接寫數字 如 :100 表示相對於 View本身的具體像素值 Animation.RELATIVE_TO_SELF 以 % 結束 如:50% 表示相對於 View本身的百分比位置 Animation.RELATIVE_TO_PARENT 以 p%結束 如:50P% 表示相對於View的父View的百分比位置 以下代碼為絕對像素,相對於自身,相對於父控件在 2秒中旋轉 1080°
setRotateType(0, 1080, Animation.ABSOLUTE, 0.5f, Animation.ABSOLUTE, 0.5f) ;
setRotateType(0, 1080, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f) ;
setRotateType(0, 1080, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f) ;
運行結果如下 :

 

ScaleAnimation


AlphaAnimation對應Xml的 < scale> 標簽,可以實現縮放的動畫效果,其定義屬性有:

 


        
        
        
        
        
        
    
屬性 含義 android:fromXScale 動畫開始時X坐標上的縮放尺寸 android:toXScale 動畫結束時X坐標上的縮放尺寸 android:fromYScale 動畫開始時Y坐標上的縮放尺寸 android:toYScale 動畫結束時Y坐標上的縮放尺寸 android:pivotX 縮放時的固定不變的X坐標 android:pivotY 縮放時的固定不變的Y坐標 縮放中心坐標的值可以有三種格式(一般用百分比表示,0%表示左邊緣,100%表示右邊緣) : 類中字段 xml中字段 描述 Animation.ABSOLUTE 直接寫數字 如 :100 表示相對於 View本身的具體像素值 Animation.RELATIVE_TO_SELF 以 % 結束 如:50% 表示相對於 View本身的百分比位置 Animation.RELATIVE_TO_PARENT 以 p%結束 如:50P% 表示相對於View的父View的百分比位置 以下代碼為絕對像素,相對於自身,相對於父控件 的0.5,進行放大 2倍
setScaleType(0, 2, 0, 2, Animation.ABSOLUTE, 0.5f, Animation.ABSOLUTE, 0.5f) ;
setScaleType(0, 2, 0, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f) ;
setScaleType(0, 2, 0, 2, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f) ;
運行結果如下 :

 

AnimationSet


AnimationSet對應Xml的 < set> 標簽,可以將多個動畫組合起來,變成一個動畫集。比如想將一張圖片縮放的同時也做移動,這時候就要用標簽組合縮放動畫和移動動畫了。其定義屬性如下 :

 


        
        
        
        
        
        
    
以上的屬性在 Animation中有,描述一下 shareInterpolator的屬性 :
android:shareInterpolator
??shareInterpolator取值true或false,取true時,指在AnimationSet中定義一個插值器(interpolater),它下面的所有動畫共同。如果設為false,則表示它下面的動畫自己定義各自的插值器。
標簽在視圖動畫中除了可以組合, , , 這四種標簽,也可以嵌套其他標簽。 也可以addAnimation() 方法加入動畫
public void addAnimation (Animation a)

AnimationDrawable控制逐幀動畫


通過< animation-list > 標簽,可以實現逐幀動畫 。一般使用步驟有以下 3步: 在 res/drawable 文件夾下新建一個xml文件,該文件詳細定義了動畫播放時所用的圖片、切換每張圖片 在代碼中,將該動畫布局文件,賦值給特定的圖片展示控件,如本例子中的ImageView。 通過 iv.getBackGround()獲取相應的AnimationDrawable對象,然後通過該對象的方法進行控制動畫 存放圖片的 xml



    
    

省略若干圖片 ... 


  
在Java中的代碼 :
private void startAnimationDrawable() {
        iv.setBackgroundResource(R.drawable.animation_list);
         a=(AnimationDrawable) iv.getBackground() ;
        a.start() ;
    }

private void stopAnimationDrawable() {
        if(a.isRunning()){
            a.stop() ;
        }
    }
運行結果:

可能會用到的方法 :
setOneShot(boolean flag) 和在配置文件中進行配置一樣,可以設置動畫是否播放一次,false為連續播放;
addFrame (Drawable frame, int duration) 動態的添加一個圖片進入該動畫中

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved