1. 程式人生 > >android xml之動畫篇 alpha、scale、translate、rotate、set的屬性及用法 和

android xml之動畫篇 alpha、scale、translate、rotate、set的屬性及用法 和

1.簡介

Android的補間動畫TweenAnimation由四種類型組成:alpha、scale、translate、rotate,對應android官方文件地址:《Animation Resources》

逐幀動畫 FrameAnimation(也稱Drawable Animation ):animation-list
alpha
漸變透明度動畫效果
scale
漸變尺寸伸縮動畫效果
translate
畫面轉換位置移動動畫效果
rotate
畫面轉移旋轉動畫效果

animation-list :通過幾張圖片的播放展示動畫

2 .使用

1 .在工程的位置 :  res/anim資料夾下          幀動畫       res/drawable資料夾

2.   使用方式:        R.anim.***你的名字 ,幀動畫  R.drawable.***你的名字

3.各個擊破

 1.alpha(透明度漸變)

<strong><span style="font-size:18px;">淡出效果
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    	android:duration="500"
    	android:fromAlpha="1.0"
    	android:toAlpha="0.0" /></span></strong>
<strong><span style="font-size:18px;">fromAlpha:開始時透明度  toAlpha:結束時透明度      duration:動畫持續時間</span></strong>
其他的一些屬性
  • android:fillAfter          如果設定為true,控制元件動畫結束時,將保持動畫最後時的狀態
  • android:fillBefore       如果設定為true,控制元件動畫結束時,還原到開始動畫前的狀態
  • android:fillEnabled     與android:fillBefore 效果相同,都是在動畫結束時,將控制元件還原到初始化狀態
  • android:repeatCount  重複次數
  • android:repeatMode 重複型別,有reverse和restart兩個值,reverse表示倒序回放,restart表示重新放一遍,必須與repeatCount一起使 用才能看到效果。因為這裡的意義是重複的型別,即回放時的動作。
  • android:interpolator  設定插值器,其實就是指定的動作效果,比如彈跳效果等,不在這小節中講解,後面會單獨列出一單講解。

 2.scale(尺寸伸縮)

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator= "@android:anim/decelerate_interpolator" 
    android:duration="10000"
    android:fromXScale="0.0"
    android:fromYScale="0.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:startOffset="0"
    android:toXScale="1.5"
    android:toYScale="1.5" />
interpolator指定動畫插入器,常見的有加速減速插入器accelerate_decelerate_interpolator,加速插入器elerate_interpolator,減速插入器decelerate_interpolator。
fromXScale,fromYScale,動畫開始前X,Y的縮放,0.0為不顯示,1.0為正常大小 
toXScale,toYScale,動畫最終縮放的倍數,1.0為正常大小,大於1.0放大
pivotX,pivotY動畫起始位置,相對於螢幕的百分比,兩個都為50%表示動畫從螢幕中間開始 
startOffset,動畫多次執行的間隔時間,如果只執行一次,執行前會暫停這段時間,單位毫秒 duration,一次動畫效果消耗的時間,單位毫秒,值越小動畫速度越快
repeatCount,動畫重複的計數,動畫將會執行該值+1次 
repeatMode,動畫重複的模式,reverse為反向,當第偶次執行時,動畫方向會相反。restart為重新執行,方向不變 



 3.translat(位置轉換)

<strong><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="10000"
    android:fromXDelta="320"
    android:fromYDelta="480"
    android:toXDelta="0"
    android:toYDelta="0" /></span></strong>
<strong><span style="font-size:18px;">
fromXDelta,fromYDelta 起始時X,Y座標,螢幕右下角的座標是X:320,Y:480
toXDelta,toYDelta 動畫結束時X,Y的座標</span></strong>

在這些屬性裡面還可以加上%和p,例如:

Android:toXDelta="100%",表示自身的100%,也就是從View自己的位置開始。

android:toXDelta="80%p",表示父層View的80%,是以它父層View為參照的。



 4.rotate(旋轉)

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="10000"
    android:fromDegrees="300"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="10%"
    android:pivotY="100%"
    android:toDegrees="-360" /></span>
<span style="font-size:14px;">duration 時間   fromDegrees開始時的角度    toDegrees動畫結束時角度 結束時旋轉到的角度位置,正值代表順時針方向度數,負值程式碼逆時針方向度數</span>
    • android:interpolator  設定插值器,其實就是指定的動作效果,比如彈跳效果等,
      • android:pivotX               縮放起點X軸座標,可以是數值、百分數、百分數p 三種樣式,比如 50、50%、50%p,
      • android:pivotY               縮放起點Y軸座標,可以是數值、百分數、百分數p 三種樣式,比如 50、50%、50%p
  • android:fillAfter          如果設定為true,控制元件動畫結束時,將保持動畫最後時的狀態
  • android:fillBefore       如果設定為true,控制元件動畫結束時,還原到開始動畫前的狀態
  • android:fillEnabled     與android:fillBefore 效果相同,都是在動畫結束時,將控制元件還原到初始化狀態
  • android:repeatCount  重複次數
  • android:repeatMode 重複型別,有reverse和restart兩個值,reverse表示倒序回放,restart表示重新放一遍,必須與repeatCount一起使用才能看到效果。因為這裡的意義是重複的型別,即回放時的動作。

4.組合

如果想將這些動畫進行組合的話使用 set

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="3000"  
    android:fillAfter="true">  
      
  <alpha   
    android:fromAlpha="0.0"  
    android:toAlpha="1.0"/>  
    
  <scale  
    android:fromXScale="0.0"  
    android:toXScale="1.4"  
    android:fromYScale="0.0"  
    android:toYScale="1.4"  
    android:pivotX="50%"  
    android:pivotY="50%"/>  
    
  <rotate  
    android:fromDegrees="0"  
    android:toDegrees="720"  
    android:pivotX="50%"  
    android:pivotY="50%"/>  
         
</set>  </span>
  • android:duration        動畫持續時間,以毫秒為單位 
  • android:fillAfter          如果設定為true,控制元件動畫結束時,將保持動畫最後時的狀態
  • android:fillBefore       如果設定為true,控制元件動畫結束時,還原到開始動畫前的狀態
  • android:fillEnabled    與android:fillBefore 效果相同,都是在動畫結束時,將控制元件還原到初始化狀態
  • android:repeatCount 重複次數
  • android:repeatMode 重複型別,有reverse和restart兩個值,reverse表示倒序回放,restart表示重新放一遍,必須與repeatCount一起使用才能看到效果。因為這裡的意義是重複的型別,即回放時的動作。
  • android:interpolator  設定插值器,其實就是指定的動作效果,比如彈跳效果等,不在這小節中講解,後面會單獨列出一單講解。

5幀動畫 animation-list

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
<strong><span style="color:#006600;"><!--   
    根標籤為animation-list,其中oneshot代表著是否只展示一遍,設定為false會不停的迴圈播放動畫  
    根標籤下,通過item標籤對動畫中的每一個圖片進行宣告  
    android:duration 表示展示所用的該圖片的時間長度  
 -->  </span></strong>
    <item
        android:drawable="@drawable/tutorial1_icon1"
        android:duration="200"/>
    <item
        android:drawable="@drawable/tutorial1_icon2"
        android:duration="200"/>

</animation-list>


5.控制元件的使用

補間動畫TweenAnimation  Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.scanim);  textView.startAnimation(scaleAnimation)

動畫加監聽


alpha.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }


            @Override
            public void onAnimationEnd(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });


幀動畫的使用

imageView.setImageResource(R.drawable.t1_frame_animation);
AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getDrawable();
t1_icon1_animationDrawable.start();

動畫的xml同樣可以設定給 src 屬性,然後呼叫 getDrawble().start() 來播放動畫

幀動畫停下來

 if(animationDrawable.isRunning()){
            animationDrawable.stop();
        }


致謝