Android解码及播放Gif图片

时间: 2012-07-03 / 分类: 开发实例 / 浏览次数: 1,739 views / 9个评论 发表评论

Android系统默认不支持Gif图片的播放,需要自定义工具类对Gif图片进行解码、显示和播放动画。

至于怎么解码Gif图片,这里在别人的代码基础进行了修改:GifFrame、GifHelper等。

1、GifActivity循环播放类


package com.orgcent.gif;

import java.io.InputStream;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ImageView.ScaleType;

import com.orgcent.gif.GifHelper.GifFrame;

public class AndroidGifActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 TextView tv = new TextView(this);
 tv.setText("Android Gif Activity");
 setContentView(tv,new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

 final ImageView iv = new ImageView(this);
 iv.setScaleType(ScaleType.CENTER);
 setContentView(iv, new LayoutParams(LayoutParams.FILL_PARENT,
 LayoutParams.FILL_PARENT));
 //对Gif图片进行解码
 final InputStream is = getResources().openRawResource(R.drawable.cell_orig);
 final GifFrame[] frames = CommonUtil.getGif(is);
 System.out.println("delay:" + frames[1].delay + ",size:" + frames.length);

 mGifTask = new PlayGifTask(iv, frames);
 mGifTask.start();
 }

 @Override
 protected void onDestroy() {
 super.onDestroy();
 if(null != mGifTask) mGifTask.stop();
 }

 private PlayGifTask mGifTask;
 //用来循环播放Gif每帧图片
 private static class PlayGifTask implements Runnable {
 int i = 0;
 ImageView iv;
 GifFrame[] frames;

public PlayGifTask(ImageView iv, GifFrame[] frames) {
 this.iv = iv;
 this.frames = frames;
 }

@Override
 public void run() {
 if (!frames[i].image.isRecycled()) {
 iv.setImageBitmap(frames[i].image);
 }
 iv.postDelayed(this, frames[i++].delay);
 i %= frames.length;
 }

 public void start() {
 iv.post(this);
 }

 public void stop() {
 if(null != iv) iv.removeCallbacks(this);
 iv = null;
 if(null != frames) {
 for(GifFrame frame : frames) {
 if(frame.image != null && !frame.image.isRecycled()) {
 frame.image.recycle();
 frame.image = null;
 }
 }
 frames = null;
 }
 }
 }
}

2、Gif工具类


package com.orgcent.gif;

import java.io.InputStream;
import com.orgcent.gif.GifHelper.GifFrame;

public class CommonUtil {
 /**
 * 解码GIF图片
 *
 * @param is
 * @return
 */
 public static GifFrame[] getGif(InputStream is) {
 GifHelper gifHelper = new GifHelper();
 if (GifHelper.STATUS_OK == gifHelper.read(is)) {
 return gifHelper.getFrames();
 }
 return null;
 }
 /**
 * 判断图片是否为GIF格式
 * @param is
 * @return
 */
 public static boolean isGif(InputStream is) {
 GifHelper gifHelper = new GifHelper();
 return gifHelper.isGif(is);
 }
}
3、Gif解码类
 这个代码比价长,看Demo吧
Demo下载地址:http://code.google.com/p/android-custom-view/


.

*******************************************************************

上面是广告! 真的是广告!! 真的真的啊!!!

-----------------------------------------------------Copyright © 2011-2012--浙ICP备12011997---------------------------- ---------------------- ------------------------

无觅相关文章插件,快速提升流量