当前位置: 代码迷 >> Android >> Android中播放Gif图片的步骤
  详细解决方案

Android中播放Gif图片的步骤

热度:41   发布时间:2016-04-28 05:10:11.0
Android中播放Gif图片的方法

Android中播放Gif图片的方法。

主要原理是取出Gif中的每一帧图片,分别设置到ImageView上边展示出来

使用到Code.Google上边的一个开源类库GifDecoder,下载不了的可以从我后边给出的Demo中搬运。


准备一个类继承自ImageView重写其构造方法同时传入一个输入流。

[java] view plaincopyprint?
  1. <span style="font-size:18px;">public class GifDecoderView extends ImageView</span>  

[java] view plaincopyprint?
  1. <span style="font-size:18px;">public GifDecoderView(Context context, InputStream is) {  
  2.         super(context);  
  3.         playGif(is);  
  4.     }</span>  
playGif是播放Gif图片的主要方法,稍后给出。

在我们新建的类中增加5个参数,一个Boolean型变量去表示我们用来播放gif图片的线程是不是运行状态,一个GifDecoder的实例,一个bitmap对象用来储存这个动画的每一帧图像,一个handler去更新UI线程的信息,一个Runnable实例用来处理画出我们刚刚定义的bitmap的事情。

[java] view plaincopyprint?
  1. <span style="font-size:18px;"><span style="white-space:pre">    </span>private boolean isAni;  
  2.     private GifPlayer gp;  
  3.     private Bitmap bm;  
  4.     private Handler handler = new Handler();  
  5.     private Runnable playFrame = new Runnable() {  
  6.   
  7.         @Override  
  8.         public void run() {  
  9.             if (null != bm && !bm.isRecycled()) {  
  10.                 GifDecoderView.this.setImageBitmap(bm);  
  11.             }  
  12.         }  
  13.     };</span>  
Runnable对象中包含的是更新界面图片的方法。


playGif方法:

[java] view plaincopyprint?
  1. <span style="font-size:18px;">private void playGif(InputStream is) {  
  2.   
  3.         gp = new GifPlayer();  
  4.         gp.read(is);  
  5.         isAni = true;  
  6.         new Thread() {  
  7.             public void run() {  
  8.                 final int frameCount = gp.getFrameCount();  
  9.                 final int loopCount = gp.getLoopCount();  
  10.                 do {  
  11.                     for (int i = 0; i < frameCount; i++) {  
  12.                         bm = gp.getFrame(i);  
  13.                         int t = gp.getDelay(i);  
  14.                         handler.post(playFrame);  
  15.                         try {  
  16.                             Thread.sleep(t);  
  17.                         } catch (InterruptedException e) {  
  18.                             e.printStackTrace();  
  19.                         }  
  20.   
  21.                     }  
  22.                 } while (true);  
  23.   
  24.             };  
  25.         }.start();  
  26.     }</span>  

新建一个activity引用我们自定义好的GifdecoderView,传入要显示的Gif图片
这里我是再assets目录中放入了一个Gif图片
[java] view plaincopyprint?
  1. <span style="font-size:18px;"><span style="white-space:pre">        </span>InputStream is = null;  
  2.         try {  
  3.             is = getAssets().open("7.gif");  
  4.         } catch (IOException e) {  
  5.             e.printStackTrace();  
  6.         }  
  7.         GifDecoderView view = new GifDecoderView(this, is);  
  8.         setContentView(view);</span>  
至此Gif图片就可以播放出来了。

一个在Android上播放Gif图片的Demo

  相关解决方案