Android 編程下幀動畫在 Activity 啟動時自動運行的幾種方式


Android 開發過程中部分 Activity 在顯示的時候就要求給用戶顯示一個進度框來改善用戶體驗,比如:Activity 在啟動的時候就去聯網請求數據、讀取數據庫內容等。進度框顯示樣式如下,采用幀動畫,而非 ProgressBar。幀動畫的啟動方式有四種,代碼分別如下:

 

第一種方式在 Activity 啟動時自動運行動畫

package cn.sunzn.anim;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.ViewTreeObserver.OnPreDrawListener;
import android.widget.ImageView;

public class AnimActivity extends Activity {

    /**
     * 動畫控件
     */
    private ImageView mLoading;
    private AnimationDrawable mLoadingAinm;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }

    /**
     * 完成初始化
     */
    private void init() {
        initView();
    }

    /**
     * 初始化視圖
     */
    private void initView() {
        mLoading = (ImageView) findViewById(R.id.loading);
        mLoading.setBackgroundResource(R.drawable.progressbar_activity_waiting);
        mLoadingAinm = (AnimationDrawable) mLoading.getBackground();
        mLoading.getViewTreeObserver().addOnPreDrawListener(listener);
    }

    /**
     * 當一個視圖樹將要繪制時產生事件,可以添加一個其事件處理函數,注意結尾返回的值
     */
    OnPreDrawListener listener = new OnPreDrawListener() {
        public boolean onPreDraw() {
            mLoadingAinm.start();
            return true;
        }
    };

}

 

第二種方式在 Activity 啟動時自動運行動畫

package cn.sunzn.anim;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ImageView;

public class AnimActivity extends Activity {

    /**
     * 動畫控件
     */
    private ImageView mLoading;

    /**
     * 數據加載動畫
     */
    private AnimationDrawable mLoadingAinm;

    /**
     * 異步類執行啟動動畫
     */
    private RunAnim runAnim;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }

    /**
     * 完成初始化
     */
    private void init() {
        initView();
    }

    /**
     * 初始化視圖
     */
    private void initView() {
        mLoading = (ImageView) findViewById(R.id.loading);
        mLoading.setBackgroundResource(R.drawable.progressbar_activity_waiting);
        mLoadingAinm = (AnimationDrawable) mLoading.getBackground();
        runAnim = new RunAnim();
        runAnim.execute("");
    }

    /**
     * 異步類執行動畫
     */
    class RunAnim extends AsyncTask<String, String, String> {
        protected String doInBackground(String... params) {
            if (!mLoadingAinm.isRunning()) {
                mLoadingAinm.stop();
                mLoadingAinm.start();
            }
            return "";
        }
    }

}

 

第三種方式在 Activity 啟動時自動運行動畫

package cn.sunzn.anim;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;

public class AnimActivity extends Activity {

    /**
     * 動畫控件
     */
    private ImageView mLoading;

    /**
     * 數據加載動畫
     */
    private AnimationDrawable mLoadingAinm;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }

    /**
     * 完成初始化
     */
    private void init() {
        initView();
    }

    /**
     * 初始化視圖
     */
    private void initView() {
        mLoading = (ImageView) findViewById(R.id.loading);
        mLoading.setBackgroundResource(R.drawable.progressbar_activity_waiting);
        mLoadingAinm = (AnimationDrawable) mLoading.getBackground();
        mLoading.post(new Runnable() {
            public void run() {
                mLoadingAinm.start();
            }
        });
    }

}

 

  第四種方式在 Activity 啟動時自動運行動畫

package cn.sunzn.anim;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;

public class AnimActivity extends Activity {

    /**
     * 動畫控件
     */
    private ImageView mLoading;

    /**
     * 數據加載動畫
     */
    private AnimationDrawable mLoadingAinm;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }

    /**
     * 完成初始化
     */
    private void init() {
        initView();
    }

    /**
     * 初始化視圖
     */
    private void initView() {
        mLoading = (ImageView) findViewById(R.id.loading);
        mLoading.setBackgroundResource(R.drawable.progressbar_activity_waiting);
        mLoadingAinm = (AnimationDrawable) mLoading.getBackground();
    }
    
    /**
     * 窗體焦點改變時執行動畫
     */
    public void onWindowFocusChanged(boolean hasFocus) {
        mLoadingAinm.start();
        super.onWindowFocusChanged(hasFocus);
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM