常見的四種Animation詳解(深刻能夠製做效果動畫)

anim.xml 放入res文件中本身建立,4種經常使用的動畫效果,每一個加入了註釋




<?xml version="1.0" encoding="UTF-8"?>   
<set xmlns:android="http://schemas.android.com/apk/res/android">   

     <!--    
         Tween Animation:經過對場景裏的對象不斷作圖像變換(平移、縮放、旋轉)產生動畫效   

         Alpha:漸變透明度動畫效果   
         Scale:漸變尺寸伸縮動畫效果   
         Translate:畫面轉換位置移動動畫效果   
         Rotate:畫面旋轉動畫效果   

         Tween Animation 通用屬性[類型]    功能     
             Duration[long]  屬性爲動畫持續時間   時間以毫秒爲單位   
             fillAfter [boolean] 當設置爲true ,該動畫轉化在動畫結束後被應用   
             fillBefore[boolean] 當設置爲true ,該動畫轉化在動畫開始前被應用   

             interpolator    指定一個動畫的插入器  有一些常見的插入器   
             accelerate_decelerate_interpolator   
             加速-減速 動畫插入器   
             accelerate_interpolator   
             加速-動畫插入器   
             decelerate_interpolator   
             減速- 動畫插入器   
             其餘的屬於特定的動畫效果   
             repeatCount[int]    動畫的重複次數    
             RepeatMode[int] 定義重複的行爲 1:從新開始  2:plays backward   
             startOffset[long]   動畫之間的時間間隔,從上次動畫停多少時間開始執行下個動畫   
             zAdjustment[int]    定義動畫的Z Order的改變 0:保持Z Order不變   
             1:保持在最上層   
             -1:保持在最下層 
      -->   
     <!--   
         透明控制動畫    
      -->   
     <alpha   
         android:fromAlpha="0.1"    
         android:toAlpha="1.0"   
         android:duration="3000"   
     />   

     <!-- 尺寸伸縮動畫效果 scale   

         屬性:interpolator 指定一個動畫的插入器   

         有三種動畫插入器:   
          accelerate_decelerate_interpolator  加速-減速 動畫插入器   
          accelerate_interpolator        加速-動畫插入器   
          decelerate_interpolator        減速- 動畫插入器   

         其餘的屬於特定的動畫效果   

             fromXScale 屬性爲動畫起始時 X座標上的伸縮尺寸       
             toXScale   屬性爲動畫結束時 X座標上的伸縮尺寸        

             fromYScale 屬性爲動畫起始時Y座標上的伸縮尺寸       
             toYScale   屬性爲動畫結束時Y座標上的伸縮尺寸       

             說明:   
                  以上四種屬性值       
                     0.0表示收縮到沒有    
                     1.0表示正常無伸縮        
                     值小於1.0表示收縮     
                     值大於1.0表示放大   

             pivotX     屬性爲動畫相對於物件的X座標的開始位置   
             pivotY     屬性爲動畫相對於物件的Y座標的開始位置   
             說明:   
                     以上兩個屬性值 從0%-100%中取值   
                     50%爲物件的X或Y方向座標上的中點位置   
         長整型值:   
             duration  屬性爲動畫持續時間   
             說明:   時間以毫秒爲單位   

         布爾型值:   
             fillAfter 屬性 當設置爲true ,該動畫轉化在動畫結束後被應用   
     -->   
     <scale 
         android:interpolator="@android :anim/accelerate_decelerate_interpolator"   
         android:repeatCount="1"   

         android:fromXScale="0.5"   
         android:fromYScale="0.5"   
         android:toXScale="1.4"         
         android:toYScale="1.4"   
         android:pivotX="50%"   
         android:pivotY="50%"   
         android:fillAfter="false"   
         android:duration="3000"   

     />   
     <!--    
         畫面轉換位置移動動畫效果 translate   

         fromXDelta toXDelta 爲動畫、結束起始時 X座標上的位置      
         fromYDelta toYDelta 爲動畫、結束起始時 Y座標上的位置   
      -->   

     <translate   
         android:repeatCount="2"   
         android:fromXDelta="-30"   
         android:fromYDelta="-30"   
         android:toXDelta="-80"         
         android:toYDelta="200"   
         android:duration="3000"   
     />   
     <!--    
         畫面轉移旋轉動畫效果 rotate   

         fromDegrees 爲動畫起始時物件的角度 說明   
             當角度爲負數——表示逆時針旋轉   
             當角度爲正數——表示順時針旋轉   
             (負數from——to正數:順時針旋轉)   
             (負數from——to負數:逆時針旋轉)   
             (正數from——to正數:順時針旋轉)   
             (正數from——to負數:逆時針旋轉)   
             toDegrees   屬性爲動畫結束時物件旋轉的角度 能夠大於360度   
         pivotX   
         pivotY  爲動畫相對於物件的X、Y座標的開始位  說明:以上兩個屬性值 從0%-100%中取值   
         50%爲物件的X或Y方向座標上的中點位置   
      -->   
     <rotate   
         android:interpolator="@android :anim/accelerate_interpolator"   
         android:repeatCount="2"   
         android:fromDegrees="0"   
         android:toDegrees="+270"   
         android:pivotX="50%"   
         android:pivotY="50%"   
         android:duration="3000"   
     />   

</set>




-------------------------------J6Activity.java 一個VIEW ,一個BT測試
package gongzibai.co.cc;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;


public class J6Activity extends Activity implements OnClickListener {
     
    /** Called when the activity is first created. */


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn = (Button)findViewById(R.id.bt1);
        btn.setOnClickListener(this);
    }  
    @Override 
    public void onClick(View v) { 
        Animation animl = AnimationUtils.loadAnimation(this,R.anim.myanimation);   
//        TextView text = (TextView)findViewById(R.id.tv1);   
//        text.setAnimation(mAnimation);
        findViewById(R.id.tv1).startAnimation(animl); 
    }
}




---------------------main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:textSize="16sp"
    android:layout_marginLeft="100sp"
    android:layout_marginTop="100sp"
    android:id="@+id/tv1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="歡迎來到棒槌網!"

    />
    <Button
        android:layout_marginTop="260sp"
        android:id="@+id/bt1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Animation click"
        />

</LinearLayout> java


1、動畫類型 android

Android的animation由四種類型組成:alpha、scale、translate、rotate app

XML配置文件中
ide

alpha
漸變透明度動畫效果
scale
漸變尺寸伸縮動畫效果
translate
畫面轉換位置移動動畫效果
rotate
畫面轉移旋轉動畫效果

Java Code代碼中  
AlphaAnimation
漸變透明度動畫效果
ScaleAnimation
漸變尺寸伸縮動畫效果
TranslateAnimation
畫面轉換位置移動動畫效果
RotateAnimation
畫面轉移旋轉動畫效果


2、Android動畫模式

Animation主要有兩種動畫模式:tweened 和 frame 測試


  • 一種是tweened animation(漸變更畫)


XML中
JavaCode
alpha
AlphaAnimation
scale
ScaleAnimation


  • 一種是frame by frame(畫面轉換動畫)
XML中
JavaCode
translate
TranslateAnimation
rotate
RotateAnimation



3、XML文件中定義動畫 動畫


① 打開Eclipse,新建Android工程 this

② 在res目錄中新建anim文件夾 spa

③ 在anim目錄中新建一個myanim.xml(注意文件名小寫) .net

④ 加入XML的動畫代碼 xml


01
02
03
04
05
06
07
<fontcolor="#000"><fontface="Arial"><?xmlversion="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
  <alpha/>
  <scale/>
  <translate/>
  <rotate/>
</set></font></font>


4、Android XML動畫解析

1. Alpha


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<fontcolor="#000"><fontface="Arial"><?xmlversion="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="3000"
/>
<!-- 透明度控制動畫效果 alpha
        浮點型值:
            fromAlpha 屬性爲動畫起始時透明度
            toAlpha   屬性爲動畫結束時透明度
            說明:
               0.0表示徹底透明
               1.0表示徹底不透明
            以上值取0.0-1.0之間的float數據類型的數字
 
        長整型值:
            duration  屬性爲動畫持續時間
            說明:     
               時間以毫秒爲單位
-->
</set></font></font>


2. Scale

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?xmlversion="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
   <scale  
         android:interpolator=
                     "@android:anim/accelerate_decelerate_interpolator"
         android:fromXScale="0.0"
         android:toXScale="1.4"
         android:fromYScale="0.0"
         android:toYScale="1.4"
         android:pivotX="50%"
         android:pivotY="50%"
         android:fillAfter="false"
         android:duration="700"/>
</set>
<!-- 尺寸伸縮動畫效果 scale
      屬性:interpolator 指定一個動畫的插入器
        在我試驗過程當中,使用android.res.anim中的資源時候發現
        有三種動畫插入器:
            accelerate_decelerate_interpolator  加速-減速 動畫插入器
            accelerate_interpolator                加速-動畫插入器
            decelerate_interpolator                減速- 動畫插入器
        其餘的屬於特定的動畫效果
      浮點型值:
          
            fromXScale 屬性爲動畫起始時 X座標上的伸縮尺寸   
            toXScale   屬性爲動畫結束時 X座標上的伸縮尺寸     
         
            fromYScale 屬性爲動畫起始時Y座標上的伸縮尺寸   
            toYScale   屬性爲動畫結束時Y座標上的伸縮尺寸   
         
            說明:
                 以上四種屬性值   
    
                    0.0表示收縮到沒有
                    1.0表示正常無伸縮     
                    值小於1.0表示收縮  
                    值大於1.0表示放大
         
            pivotX     屬性爲動畫相對於物件的X座標的開始位置
            pivotY     屬性爲動畫相對於物件的Y座標的開始位置
         
            說明:
                    以上兩個屬性值 從0%-100%中取值
                    50%爲物件的X或Y方向座標上的中點位置
         
        長整型值:
            duration  屬性爲動畫持續時間
            說明:   時間以毫秒爲單位
 
        布爾型值:
            fillAfter 屬性 當設置爲true ,該動畫轉化在動畫結束後被應用
-->


3. Translate
代碼片斷,雙擊複製
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xmlversion="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="30"
android:toXDelta="-80"
android:fromYDelta="30"
android:toYDelta="300"
android:duration="2000"
/>
<!-- translate 位置轉移動畫效果
        整型值:
            fromXDelta 屬性爲動畫起始時 X座標上的位置   
            toXDelta   屬性爲動畫結束時 X座標上的位置
            fromYDelta 屬性爲動畫起始時 Y座標上的位置
            toYDelta   屬性爲動畫結束時 Y座標上的位置
            注意:
                     沒有指定fromXType toXType fromYType toYType 時候,
                     默認是以本身爲相對參照物            
        長整型值:
            duration  屬性爲動畫持續時間
            說明:   時間以毫秒爲單位
-->
</set>


4. Rotate
代碼片斷,雙擊複製
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xmlversion="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<rotate
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0"
        android:toDegrees="+350"         
        android:pivotX="50%"
        android:pivotY="50%"     
        android:duration="3000"/>  
<!-- rotate 旋轉動畫效果
      屬性:interpolator 指定一個動畫的插入器
            在我試驗過程當中,使用android.res.anim中的資源時候發現
            有三種動畫插入器:
               accelerate_decelerate_interpolator           加速-減速 動畫插入器
               accelerate_interpolator                       加速-動畫插入器
               decelerate_interpolator                       減速- 動畫插入器
            其餘的屬於特定的動畫效果
 
      浮點數型值:
            fromDegrees 屬性爲動畫起始時物件的角度   
            toDegrees   屬性爲動畫結束時物件旋轉的角度 能夠大於360度   
 
 
            說明:
                     當角度爲負數——表示逆時針旋轉
                     當角度爲正數——表示順時針旋轉              
                     (負數from——to正數:順時針旋轉)   
                     (負數from——to負數:逆時針旋轉)
                     (正數from——to正數:順時針旋轉)
                     (正數from——to負數:逆時針旋轉)      
 
            pivotX     屬性爲動畫相對於物件的X座標的開始位置
            pivotY     屬性爲動畫相對於物件的Y座標的開始位置
 
            說明:        以上兩個屬性值 從0%-100%中取值
                        50%爲物件的X或Y方向座標上的中點位置
 
        長整型值:
            duration  屬性爲動畫持續時間
            說明:       時間以毫秒爲單位
-->
</set>


XML 中使用動畫效果
代碼片斷,雙擊複製
01
02
03
04
05
06
publicstaticAnimation loadAnimation (Context context,intid)
//第一個參數Context爲程序的上下文   
//第二個參數id爲動畫XML文件的引用
//例子:
myAnimation= AnimationUtils.loadAnimation(this, R.anim.my_action);
//使用AnimationUtils類的靜態方法loadAnimation()來加載XML中的動畫XML文件


5、Java代碼中定義動畫
代碼片斷,雙擊複製
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
//在代碼中定義 動畫實例對象
privateAnimation myAnimation_Alpha;
privateAnimation myAnimation_Scale;
privateAnimation myAnimation_Translate;
privateAnimation myAnimation_Rotate;
 
   //根據各自的構造方法來初始化一個實例對象
myAnimation_Alpha =newAlphaAnimation(0.1f,1.0f);
 
myAnimation_Scale =newScaleAnimation(0.0f,1.4f,0.0f,1.4f,
            Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);
 
myAnimation_Translate =newTranslateAnimation(30.0f, -80.0f,30.0f,300.0f);
 
myAnimation_Rotate =newRotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);


6、Android 代碼動畫解析

1. AlphaAnimation

AlphaAnimation類對象定義
代碼片斷,雙擊複製
01
privateAlphaAnimation myAnimation_Alpha;


AlphaAnimation類對象構造
代碼片斷,雙擊複製
01
02
03
04
05
06
07
AlphaAnimation(floatfromAlpha,floattoAlpha)
//第一個參數fromAlpha爲 動畫開始時候透明度
//第二個參數toAlpha爲 動畫結束時候透明度
myAnimation_Alpha =newAlphaAnimation(0.1f,1.0f);
//說明:
//                0.0表示徹底透明
//                1.0表示徹底不透明


設置動畫持續時間

01
02
myAnimation_Alpha.setDuration(5000);
//設置時間持續時間爲 5000毫秒


2. ScaleAnimation
ScaleAnimation類對象定義

01
privateScaleAnimation myAnimation_Scale;


ScaleAnimation類對象構造

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
ScaleAnimation(floatfromX,floattoX,floatfromY,floattoY,
           intpivotXType,floatpivotXValue,intpivotYType,floatpivotYValue)
//第一個參數fromX爲動畫起始時 X座標上的伸縮尺寸   
//第二個參數toX爲動畫結束時 X座標上的伸縮尺寸     
//第三個參數fromY爲動畫起始時Y座標上的伸縮尺寸   
//第四個參數toY爲動畫結束時Y座標上的伸縮尺寸  
/*說明:
                    以上四種屬性值   
                    0.0表示收縮到沒有
                    1.0表示正常無伸縮     
                    值小於1.0表示收縮  
                    值大於1.0表示放大
*/
//第五個參數pivotXType爲動畫在X軸相對於物件位置類型  
//第六個參數pivotXValue爲動畫相對於物件的X座標的開始位置
//第七個參數pivotXType爲動畫在Y軸相對於物件位置類型   
//第八個參數pivotYValue爲動畫相對於物件的Y座標的開始位置
myAnimation_Scale =newScaleAnimation(0.0f,1.4f,0.0f,1.4f,
            Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);


設置動畫持續時間

01
02
myAnimation_Scale.setDuration(700);
//設置時間持續時間爲 700毫秒


3. TranslateAnimation

ranslateAnimation類對象定義


01
<font color="#000"><font face="Arial">privateTranslateAnimation myAnimation_Translate;</font></font>

TranslateAnimation類對象構造
代碼片斷,雙擊複製
01
02
03
04
05
06
TranslateAnimation(floatfromXDelta,floattoXDelta,
                       floatfromYDelta,floattoYDelta)
//第一個參數fromXDelta爲動畫起始時 X座標上的移動位置   
//第二個參數toXDelta爲動畫結束時 X座標上的移動位置      
//第三個參數fromYDelta爲動畫起始時Y座標上的移動位置     
//第四個參數toYDelta爲動畫結束時Y座標上的移動位置


設置動畫持續時間

01
02
03
myAnimation_Translate =newTranslateAnimation(10f, 100f, 10f, 100f);
myAnimation_Translate.setDuration(2000);
//設置時間持續時間爲 2000毫秒


4. RotateAnimation
RotateAnimation類對象定義

01
privateRotateAnimation myAnimation_Rotate;


RotateAnimation類對象構造

01
02
03
04
05
06
07
08
09
10
RotateAnimation(floatfromDegrees,floattoDegrees,
            intpivotXType,floatpivotXValue,intpivotYType,floatpivotYValue)
//第一個參數fromDegrees爲動畫起始時的旋轉角度   
//第二個參數toDegrees爲動畫旋轉到的角度   
//第三個參數pivotXType爲動畫在X軸相對於物件位置類型  
//第四個參數pivotXValue爲動畫相對於物件的X座標的開始位置
//第五個參數pivotXType爲動畫在Y軸相對於物件位置類型   
//第六個參數pivotYValue爲動畫相對於物件的Y座標的開始位置
myAnimation_Rotate =newRotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);


設置動畫持續時間

01
02
myAnimation_Rotate.setDuration(3000);
//設置時間持續時間爲 3000毫秒


如何Java代碼中使用動畫效果
使用從View父類繼承過來的方法startAnimation()來爲View或是子類View等等添加一個動畫效果

01
02
03
04
05
publicvoidstartAnimation (Animation animation)
view.startAnimation(myAnimation_Alpha);
view.startAnimation(myAnimation_Scale);
view.startAnimation(myAnimation_Translate);
view.startAnimation(myAnimation_Rotate);
相關文章
相關標籤/搜索