[Android動畫] 補間動畫(Tween Animation)一

  1. Animation類:動畫抽象類java

    Android系統提供了兩種實現動畫的方式,一種是補間動畫(Tween Animation),另外一種是幀動畫(Frame Animation)。補間動畫能夠實現View組件的移動、放大、縮小以及漸變等效果,幀動畫則提供了一種逐幀播放圖片的動畫方式。
    ide

    Animation類是Android系統的一個動畫抽象類,全部其餘一些動畫類都要繼承該類中的實現方法。Animation類主要用於補間動畫效果,提供了動畫啓動、中止、重複、持續時間等方法。Animation類中的方法適用於任何一種補間動畫對象。動畫

  2. setDuration方法:設置持續時間spa

    【功能說明】該方法用於設置動畫的持續時間,以毫秒爲單位。該方法是設置補間動畫時間長度的主要方法,使用很是廣泛。code

    【基本語法】public void setDuration (long durationMillis)orm

    其中,參數durationMillis爲動畫的持續時間,單位爲毫秒(ms)。對象

  3. startNow方法:馬上啓動動畫繼承

    【功能說明】該方法用於啓動執行一個動畫。該方法是啓動執行動畫的主要方法,使用時須要先經過setAnimation方法爲某一個View對象設置動畫。另外,用戶在程序中也可使用View組件的startAnimation方法來啓動執行動畫。圖片

    【基本語法】public void startNow ()get

    public class firstActivity extends Activity {  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {               //重載onCreate方法  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
     
        final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView對象  
        Button btn1=(Button)findViewById(R.id.button1);             //按鈕對象  
        final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移動動畫效果  
     
        btn1.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
              
            @Override  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                translateAnimation.setDuration(3000);               //設置動畫持續時間  
                image.setAnimation(translateAnimation);             //設置動畫效果  
                translateAnimation.startNow();                      //啓動動畫  
            }  
        });  
    }  
    }

4.  start方法:啓動動畫

    【功能說明】該方法用於啓動執行一個動畫。該方法是啓動執行動畫的另外一個主要方法,使用時須要先經過       setAnimation方法爲某一個View 對象設置動畫。start方法區別於startNow方法的地方在於,start方法能夠用於在getTransformation方法被調用時啓動動 畫。

    【基本語法】public void start ()

     start方法的執行效果相似於startNow方法,這裏再也不贅述

5.  cancel方法:取消動畫

    【功能說明】該方法用於取消一個動畫的執行。該方法是取得一個正在執行中的動畫的主要方法。cancel方法和startNow方法結合能夠實現對 動畫執行過程的控制。須要注意的是,經過cancel方法取消的動畫,必須使用reset方法或者setAnimation方法從新設置,才能夠再次執行 動畫。

    【基本語法】public void cancel ()

    【實例演示】下面經過代碼來演示如何取消動畫效果執行。

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重載onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView對象  
    Button btn1=(Button)findViewById(R.id.button1);             //按鈕對象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);//移動動畫效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //設置動畫持續時間  
            image.setAnimation(translateAnimation);             //設置動畫效果  
            translateAnimation.startNow();                      //啓動動畫  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消動畫執行  
        }  
    });  
}  
}

6.  setRepeatCount方法:設置重複次數

    【功能說明】該方法用於設置一個動畫效果重複執行的次數。Android系統默認每一個動畫僅執行一次,經過該方法能夠  設置動畫執行屢次。

    【基本語法】public void setRepeatCount (int repeatCount)

     其中,參數repeatCount爲重複執行的次數。若是設置爲n,則動畫將執行n+1次。

    【實例演示】下面經過代碼來演示如何連續執行屢次動畫效果。

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重載onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView對象  
    Button btn1=(Button)findViewById(R.id.button1);             //按鈕對象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移動動畫效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //設置動畫持續時間  
            translateAnimation.setRepeatCount(2);               //設置重複次數  
            image.setAnimation(translateAnimation);             //設置動畫效果  
            translateAnimation.startNow();                      //啓動動畫  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消動畫執行  
        }  
    });  
}  
}

7.  setFillEnabled方法:使能填充效果

    【功能說明】該方法用於使能填充效果。當該方法設置爲true時,將執行setFillBefore和setFillAfter方法,不然將忽略setFillBefore和setFillAfter方法。

    【基本語法】public void setFillEnabled (boolean fillEnabled)

    其中,參數fillEnabled爲是否使能填充效果,true表示使能該效果,false表示禁用該效果。

    setFillEnabled方法的示例能夠參閱setFillBefore方法和setFillAfter方法中的示例代碼

8.  setFillBefore方法:設置起始填充

    【功能說明】該方法用於設置一個動畫效果執行完畢後,View對象返回到起始的位置。該方法的效果是系統默認的效果。該方法的執行,須要首先經過setFillEnabled方法使能填充效果,不然設置無效。

    【基本語法】public void setFillBefore (boolean fillBefore)

    其中,參數fillBefore爲是否執行起始填充效果,true表示使能該效果,false表示禁用該效果。

    【實例演示】下面經過代碼來演示如何讓View對象在動畫執行完畢後迴歸到起始位置。

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重載onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView對象  
    Button btn1=(Button)findViewById(R.id.button1);             //按鈕對象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移動動畫效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //設置動畫持續時間  
            translateAnimation.setFillBefore(true);             //迴歸起始位置  
            translateAnimation.setFillEnabled(true);            //使能填充效果  
            image.setAnimation(translateAnimation);             //設置動畫效果  
            translateAnimation.startNow();                      //啓動動畫  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消動畫執行  
        }  
    });  
}  
}

    在這段代碼中,首先初始化了一個移動的動畫效果translateAnimation。而後,在按鈕 監聽器中,經過    setDuration方法設置動畫持續時間,經過setFillBefore方法使對象回到起始點,並使用setFillEnabled 使能填充效果,最後使用startNow方法啓動動畫效果。讀者執行這段代碼,當點擊"執行動畫"按鈕時,圖片開始移動,當動畫結束以後,圖片將自動跳回 到起始位置

9. setFillAfter方法:設置終止填充

    【功能說明】該方法用於設置一個動畫效果執行完畢後,View對象保留在終止的位置。該方法的執行,須要首先經過setFillEnabled方法使能填充效果,不然設置無效。

    【基本語法】public void setFillAfter (boolean fillAfter)

    其中,參數fillAfter爲是否執行終止填充效果,true表示使能該效果,false表示禁用該效果。

    【實例演示】下面經過代碼來演示如何讓View對象在動畫執行完畢後保留在終止位置。

    

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重載onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView對象  
    Button btn1=(Button)findViewById(R.id.button1);             //按鈕對象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移動動畫效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //設置動畫持續時間  
            translateAnimation.setFillAfter (true);             //保留在終止位置  
            translateAnimation.setFillEnabled(true);            //使能填充效果  
            image.setAnimation(translateAnimation);             //設置動畫效果  
            translateAnimation.startNow();                      //啓動動畫  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消動畫執行  
        }  
    });  
}  
}

    在這段代碼中,首先初始化了一個移動的動畫效果translateAnimation。而後,在按鈕監聽器中,經過setDuration方法設置動畫持 續時間,經過setFillAfter方法使對象保留在終止點,並使用setFillEnabled使能填充效果,最後使用startNow方法啓動動畫 效果。讀者執行這段代碼,當點擊"執行動畫"按鈕時,圖片開始移動,當動畫結束以後,圖片將停留在終止位置

10.  setRepeatMode方法:設置重複模式

    【功能說明】該方法用於設置一個動畫效果執行的重複模式。Android系統中提供了幾種重複模式,其中最主要的即是RESTART模式和REVERSE模式。

    【基本語法】public void setRepeatMode (int repeatMode)

    其中,參數repeatMode爲動畫效果的重複模式,經常使用的取值以下。

    RESTART:從新從頭開始執行。

    REVERSE:反方向執行。

    【實例演示】下面經過代碼來演示如何更改動畫路徑的方向。

    

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重載onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView對象  
    Button btn1=(Button)findViewById(R.id.button1);             //按鈕對象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移動動畫效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //設置動畫持續時間  
            translateAnimation.setRepeatCount(2);               //設置重複次數  
            translateAnimation.setRepeatMode(Animation.RESTART);    //從新從頭執行  
            //translateAnimation.setRepeatMode(Animation.REVERSE);  //反方向執行  
            image.setAnimation(translateAnimation);             //設置動畫效果  
            translateAnimation.startNow();                      //啓動動畫  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消動畫執行  
        }  
    });  
}  
}

    在這段代碼中,首先初始化了一個移動的動畫效果translateAnimation。而後,在按鈕監聽器中,經過setDuration方法設置 動畫持續時間,經過setRepeatCount方法設置重複次數,經過setRepeatMode設置重複模式,最後使用startNow方法啓動動畫 效果。

若是設置的重複模式爲Animation.RESTART,則表示從新從頭開始執行。讀者執行這段代碼,當點擊"執行動畫"按鈕時,圖片開始移動,當一次動畫執行結束以後,圖片將從新從頭開始執行。

若是設置的重複模式爲Animation.REVERSE,則表示反方向執行。讀者執行這段代碼,當點擊"執行動畫"按鈕時,圖片開始移動,當一次動畫執行結束以後,圖片將向反方向運動.

11.  setStartOffset方法:設置啓動時間

    【功能說明】該方法用於設置一個動畫執行的啓動時間,單位爲毫秒。系統默認當執行start方法後馬上執行動畫,當使用該方法設置後,將延遲必定的時間再啓動動畫。

    【基本語法】public void setStartOffset (long startOffset)

    其中,參數startOffset爲動畫的啓動時間,單位爲毫秒(ms)。

    【實例演示】下面經過代碼來演示如何更改動畫的啓動時間。

    

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重載onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView對象  
    Button btn1=(Button)findViewById(R.id.button1);             //按鈕對象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移動動畫效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //設置動畫持續時間  
            translateAnimation.setStartOffset(3000);            //設置啓動時間  
            image.setAnimation(translateAnimation);             //設置動畫效果  
            translateAnimation.startNow();                      //啓動動畫  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //設置監聽器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消動畫執行  
        }  
    });  
}  
}

在這段代碼中,首先初始化了一個移動的動畫效果translateAnimation。而後,在按鈕監聽器中,經過setDuration方法設置動畫的 持續時間,經過setStartOffset方法設置動畫的啓動時間,最後使用startNow方法啓動動畫效果。讀者執行這段代碼,當點擊"執行動畫" 按鈕時,將等待3秒以後,圖片纔開始移動。

相關文章
相關標籤/搜索