Android手机开发专题博客

Android手机开发专题博客,为您精选安卓手机开发教程,助您手机开发愉快!

公告信息
欢迎光临Android手机开发专题博客,祝您手机开发愉快!
文章档案

Android实现GIF图片解码与播放

如何在Android中播放GIF图片呢?如果直接按以前的方法,分解图片,可能相对比较麻烦。

今天给大伙介绍一种新的方式,构造自己的Android图片解码帮助类,直接在Android解码GIF图片,还可以实现播放功能。

下面先请看一GIF图:

我们以此美图为示例,解码GIF。  

先编写一个GIF解码的帮助类,该类提供了几个操作GIF图片的方法,比如图片的初始化呀,切换图片呀,获得整个GIF的组合数量等等,由于代码量太多,这里就不列出来,后面会提供源码供大家参考,可于源码内找到该帮助类。

 

之后,编写一个用于可显示Gif 的组件,继承自View 并实现了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, 00new 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) {

            }
        }
    }

}

 

基础功能实现后。可通过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();
            }
        });

 

显示效果:

 

源码下载:gifPlayer

大伙看到效果了吧,觉得如何呢?

Android实现GIF图片解码与播放,为您提供!

新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2011/9/8 13:47:28 | android开发教程 | |

#4Anonymous[Register][122.233.193.*]2015/12/7 11:23:21
完全没用,换张图片立马挂掉
#3Anonymous[Register][125.83.127.*]2014/12/7 21:11:26
非常不错,至少能打开文件并播放
#2Anonymous[Register][123.117.91.*]2014/5/15 10:48:01
我也想知道,怎样设置gif大小
#1Anonymous[Register][221.122.98.*]2013/7/2 9:30:13
请问,如何修改图片的大小呢?
  • 发表评论