西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)Android → Android 平臺實現(xiàn)Gif 圖像解碼并播放代碼及組件

Android 平臺實現(xiàn)Gif 圖像解碼并播放代碼及組件

相關軟件相關文章發(fā)表評論 來源:本站整理時間:2011/1/14 0:33:44字體大。A-A+

作者:佚名點擊:834次評論:0次標簽: Android 解碼

  • 類型:文件處理大。209KB語言:中文 評分:7.0
  • 標簽:
立即下載
 Android 播放GIF之前就有過一篇文章是講述如何使用GIF文件并播放?梢酝ㄟ^ 這里 了解關于播放GIF的一種方法。

  如果前面有了解過的朋友肯定知道這上面的做法比較麻煩,又要去分解圖片,又要寫各種麻煩的XML文件,有點郁悶,而且還帶來的直接后果是一個比較多動作的GIF圖片可能會將項目的體積變大,這點很多朋友都無法接受。不過這樣的好處也顯而易見,就是運行的速度會比你去解碼的速度要快。

  以下這種方法是需要解碼,但是速度的話保證不了,可能開線程的時候沒有處理好吧,以下面這張圖片為例做解碼播放:

  首先,先編寫一個GIF解碼的幫助類,該類提供了幾個操作GIF圖片的方法,比如圖片的初始化呀,切換圖片呀,獲得整個GIF的組合數(shù)量等等,由于代碼量太多,這里就不列出來,后面會提供源碼供大家參考,可于源碼內找到該幫助類。

 之后,編寫一個用于可顯示Gif 的組件,繼承自View 并實現(xiàn)了Runable,代碼如下:

 package com.terry.gif;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class TypegifView extends View implements Runnable {
    gifOpenHelper gHelper;
    private boolean isStop = true;
    int delta;
    String title;

    Bitmap bmp;

    // construct - refer for java
    public TypegifView(Context context) {
        this(context, null);

    }

    // construct - refer for xml
    public TypegifView(Context context, AttributeSet attrs) {
        super(context, attrs);
//添加屬性
        TypedArray ta = context.obtainStyledAttributes(attrs,
                R.styleable.gifView);
        int n = ta.getIndexCount();

        for (int i = 0; i < n; i++) {
            int attr = ta.getIndex(i);

            switch (attr) {
            case R.styleable.gifView_src:
                int id = ta.getResourceId(R.styleable.gifView_src, 0);
                setSrc(id);
                break;

            case R.styleable.gifView_delay:
                int idelta = ta.getInteger(R.styleable.gifView_delay, 1);
                setDelta(idelta);
                break;

            case R.styleable.gifView_stop:
                boolean sp = ta.getBoolean(R.styleable.gifView_stop, false);
                if (!sp) {
                    setStop();
                }
                break;
            }

        }

        ta.recycle();
    }

    /**
     * 設置停止
     * 
     * @param stop
     */
    public void setStop() {
        isStop = false;
    }

    /**
     * 設置啟動
     */
    public void setStart() {
        isStop = true;

        Thread updateTimer = new Thread(this);
        updateTimer.start();
    }

    /**
     * 通過下票設置第幾張圖片顯示
     * @param id
     */
    public void setSrc(int id) {

        gHelper = new gifOpenHelper();
        gHelper.read(TypegifView.this.getResources().openRawResource(id));
        bmp = gHelper.getImage();// 得到第一張圖片
    }

    public void setDelta(int is) {
        delta = is;
    }

    // to meaure its Width & Height
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(measureWidth(widthMeasureSpec),
                measureHeight(heightMeasureSpec));
    }

    private int measureWidth(int measureSpec) {
        return gHelper.getWidth();
    }

    private int measureHeight(int measureSpec) {
        return gHelper.getHeigh();
    }

    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        canvas.drawBitmap(bmp, 0, 0, new Paint());
        bmp = gHelper.nextBitmap();

    }

    public void run() {
        // TODO Auto-generated method stub
        while (isStop) {
            try {
                this.postInvalidate();
                Thread.sleep(gHelper.nextDelay() / delta);
            } catch (Exception ex) {

            }
        }
    }

}

 基礎功能實現(xiàn)后?赏ㄟ^view.start()開啟GIF的播放,或者view.stop()停止GIF的播放,代碼如下:

 setContentView(R.layout.main);
        Button btn = (Button) findViewById(R.id.Button01);
        Button btn2 = (Button) findViewById(R.id.Button02);
        final TypegifView view = (TypegifView) findViewById(R.id.gifView1);

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                view.setStop();
            }
        });

        btn2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                view.setStart();
            }
        });

 

顯示效果:

 

    hosts修復軟件
    (60)hosts修復軟件
    文件是計算機中一個舉足輕重的文件,該文件有一個比較大的特點就是沒有擴展名。經(jīng)常在一些電腦個性技巧以及其他領域方面會用到,西西提供文件修復工具軟件下載大全。官方介紹是一個沒有擴展名的系統(tǒng)文件,可以用記事本等工具打開,其作用就是將一些常用的網(wǎng)址域名與其對應的地址建立一個關聯(lián)數(shù)據(jù)庫,當用戶在瀏覽器中輸入一個需要登錄的網(wǎng)址時,系統(tǒng)會首先自動從文件中尋找對應的地址,一旦找到系統(tǒng)會立即打開對應網(wǎng)頁,如果沒有找...更多>>

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)