Android動畫之Frame Animation逐幀動畫

所謂的逐幀動畫,在我的理解並能不算是動畫,它的實現是一系列相似的圖片播放得出的效果.類似於幻燈片,附上實際效果圖:
這裏寫圖片描述

第一步:
你需要一系列圖片,模擬動畫,圖片已上傳.把這些圖片放在drawable目錄下.選中drawable右鍵選擇new–>Drawable resource file
這裏寫圖片描述

名字隨便取,Root element 選擇animation-list
這裏寫圖片描述

wifi_animation代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" >
    <item android:drawable="@drawable/wifi_icon1" android:duration="100"></item>
    <item android:drawable="@drawable/wifi_icon2" android:duration="100"></item>
    <item android:drawable="@drawable/wifi_icon3" android:duration="100"></item>
    <item android:drawable="@drawable/wifi_icon4" android:duration="100"></item>
    <item android:drawable="@drawable/wifi_icon5" android:duration="100"></item>
    <item android:drawable="@drawable/wifi_icon6" android:duration="100"></item>
    <!-- 
    android:oneshot="false" 表示循環播放, 當爲true的時候,播放到最後
    一張圖片會停止
    android:duration="100" 表示播放時長單位爲毫秒
    <item></item>的順序是動畫播放的順序

    -->
</animation-list>

第二步:
activity_main.xml中拖一個ImageView和兩個Button(Button控制動畫的播放與停止),注意ImageView的src屬性是你定義的animation-list.代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="myself.myapplication.MainActivity">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/wifi_animation"
        android:layout_marginTop="86dp"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:text="@string/fram"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="85dp"
        android:id="@+id/button"
        android:layout_below="@+id/imageView"
        android:layout_centerHorizontal="true" />

    <Button
        android:text="@string/stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button"
        android:layout_alignLeft="@+id/button"
        android:layout_alignStart="@+id/button"
        android:layout_marginTop="43dp"
        android:id="@+id/button2" />
</RelativeLayout>

第三步:
編寫MainActivity.Java,代碼如下:

package myself.myapplication;

import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button b1,b2;
    private ImageView imageView;
    /**
     *實現逐幀動畫必須用到的類,
     *AnimationDrawable 繼承自 DrawableContainer類
     * DrawableContainer類繼承自Drawable類
     * 我們在drawable目錄下定義的動畫須通過該類得到
     */
    private AnimationDrawable animationDrawable;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1 = (Button) findViewById(R.id.button);
        b2 = (Button) findViewById(R.id.button2);
        imageView = (ImageView) findViewById(R.id.imageView);
        //逐幀動畫對象是通過imageView得到的,因爲ImageView是動畫顯示的載體
        animationDrawable = (AnimationDrawable) imageView.getDrawable();
        //啓動按鈕點擊事件
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        //匹配播放和停止按鈕的點擊事件
        switch (v.getId()) {
            case R.id.button:
                //如果動畫沒有在播放,就播放動畫
                if (!animationDrawable.isRunning()){
                    animationDrawable.start();
                }
                break;
            case R.id.button2:
                //如果動畫正在播放,就停止播放動畫
                if (animationDrawable.isRunning()) {
                    animationDrawable.stop();
                }
                break;
        }
    }
}

項目素材:
這裏寫圖片描述這裏寫圖片描述這裏寫圖片描述這裏寫圖片描述這裏寫圖片描述這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章