android動畫 通過AnimationDrawable控制逐幀動畫
阿新 • • 發佈:2019-01-06
效果圖:
當我們點選按鈕時,該圖片會不停的旋轉,當再次點選按鈕時,會停止在當前的狀態。
activity程式碼:
[java] view plain copy print?- package cn.com.chenzheng_java.animation;
- import android.app.Activity;
- import android.graphics.drawable.AnimationDrawable;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.ImageView;
- /**
- * @description android中的逐幀動畫.
- * 逐幀動畫的原理很簡單,跟電影的播放一樣,一張張類似的圖片不停的切換,當切換速度達到一定值時,
- * 我們的視覺就會出現殘影,殘影的出現保證了視覺上變化的連續性,這時候圖片的切換看在我們眼中就跟真實的一樣了。
- * 想使用逐幀動畫:
- * 第一步:需要在res/drawable資料夾下新建一個xml檔案,該檔案詳細定義了動畫播放時所用的圖片、切換每張圖片
- * 所用的時間、是否為連續播放等等。(有些文章說,在res/anim資料夾下放置該檔案,事實證明,會出錯哦)
- * 第二步:在程式碼中,將該動畫布局檔案,賦值給特定的圖片展示控制元件,如本例子中的ImageView。
- * 第三步:通過imageView.getBackGround()獲取相應的AnimationDrawable物件,然後通過該物件的方法進行控制動畫
- * @author chenzheng_java
- *
- */
- publicclass Animation1Activity extends Activity {
- ImageView imageView ;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.animation1);
- imageView = (ImageView) findViewById(R.id.imageView_animation1);
- imageView.setBackgroundResource(R.drawable.animation1_drawable);
- }
- publicvoid myClickHandler(View targetButton){
- // 獲取AnimationDrawable物件
- AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
- // 動畫是否正在執行
- if(animationDrawable.isRunning()){
- //停止動畫播放
- animationDrawable.stop();
- }
- else{
- //開始或者繼續動畫播放
- animationDrawable.start();
- }
- }
- }
animation1.xml檔案:
[xhtml] view plain copy print?- <?xmlversion=“1.0”encoding=“utf-8”?>
- <LinearLayoutxmlns:android=“http://schemas.android.com/apk/res/android”
- android:layout_width=“match_parent”android:layout_height=“match_parent”
- android:orientation=“vertical”>
- <Buttonandroid:id=“@+id/button_animation1”android:text=“動畫開始”
- android:layout_gravity=“center_horizontal”android:layout_width=“wrap_content”
- android:layout_height=“wrap_content”android:onClick=“myClickHandler”></Button>
- <ImageViewandroid:id=“@+id/imageView_animation1”
- android:layout_width=“fill_parent”
- android:layout_height=“wrap_content”android:layout_weight=“1”></ImageView>
- </LinearLayout>
存放動畫檔案的xml檔案:
[xhtml] view plain copy print?- <?xmlversion=“1.0”encoding=“utf-8”?>
- <!–
- 根標籤為animation-list,其中oneshot代表著是否只展示一遍,設定為false會不停的迴圈播放動畫
- 根標籤下,通過item標籤對動畫中的每一個圖片進行宣告
- android:duration 表示展示所用的該圖片的時間長度
- –>
- <animation-list
- xmlns:android=“http://schemas.android.com/apk/res/android”
- android:oneshot=“false”
- >
- <itemandroid:drawable=“@drawable/a1”android:duration=“50”></item>
- <itemandroid:drawable=“@drawable/a2”android:duration=“50”></item>
- <itemandroid:drawable=“@drawable/a3”android:duration=“50”></item>
- <itemandroid:drawable=“@drawable/a4”android:duration=“50”></item>
- <itemandroid:drawable=“@drawable/a5”android:duration=“50”></item>
- <itemandroid:drawable=“@drawable/a6”android:duration=“50”></item>
- </animation-list>
除此之外:在AnimationDrawable中,我們還可以看到如下的幾個重要方法:
setOneShot(boolean flag) 和在配置檔案中進行配置一樣,可以設定動畫是否播放一次,false為連續播放;
addFrame (Drawable frame, int duration) 動態的新增一個圖片進入該動畫中