Android中播放Gif图片的方法

Android中播放Gif图片的方法。

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

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

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

[java] view
plain
copyprint?

  1. <span style="font-size:18px;">public class GifDecoderView extends ImageView</span>

[java] view
plain
copyprint?

  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
plain
copyprint?

  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. @Override
  7. public void run() {
  8. if (null != bm && !bm.isRecycled()) {
  9. GifDecoderView.this.setImageBitmap(bm);
  10. }
  11. }
  12. };</span>

Runnable对象中包含的是更新界面图片的方法。

playGif方法:

[java] view
plain
copyprint?

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

新建一个activity引用我们自定义好的GifdecoderView,传入要显示的Gif图片

这里我是再assets目录中放入了一个Gif图片

[java] view
plain
copyprint?

  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

Android中播放Gif图片的方法

时间: 2024-10-08 05:04:16

Android中播放Gif图片的方法的相关文章

Android中WebView获取网页中标题 ,内容, 图片的方法

如题,在Android中WebView获取网页中标题 ,内容, 图片的方法 首先是获取标题,在new WebChromeClient(){}中重写onReceivedTitle()方法 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); // loge.e("__页面标题__"+title); } 获取内容,是参考的这边的 http

Android -- 加载大图片的方法

在android中要加载一张大图片到内存中如果通过如下方式进行: Bitmap bitmap= BitmapFactory.decodeFile("/sdcard/a.jpg"); iv.setImageBitmap(bitmap); 则会抛出内存溢出异常Caused by: java.lang.OutOfMemoryError 正确的做法应该是这样的: public class MainActivity extends Activity { private ImageView iv;

Android中常用的bitmap处理方法

收集了很多bitmap相关的处理方法,几乎全部应用在项目中,所以特记录下! package com.tmacsky.utils; import java.io.ByteArrayOutputStream; import java.io.IOException; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.gr

css网页中设置背景图片的方法详解

css网页中设置背景图片的方法详解 在css代码中设置背景图片的方法,包括背景图片.背景重复.背景固定.背景定位等 用css设置网页中的背景图片,主要有如下几个属性: 1,背景颜色 {background-color:数值}2,背景图片 {background-image: url(URL)|none}3,背景重复 {background-repeat:inherit|no-repeat|repeat|repeat-x|repeat-y}4,背景固定 {background-attachment

Android中通过注解代替findViewById方法

尊重原创 http://write.blog.csdn.net/postedit/26507351 这篇文章主要讲解注解实现findViewById的功能,首先我们来熟悉一下在java中怎么定义一个注解和解析一个注解 注解的概念是在jdk5.0中提出来的,在java.lang的包中已经定义了三个注解:Override,Deprecated,SuppressWarnings Override相信大家非常熟悉,就是表明这个方法是改写了父类的方法 Deprecated表示在新版本的 jdk中已经不建议

如何在Android中播放网络传输过来的AAC音频?

============问题描述============ 如何在Android中播放网络传输过来的AAC音频?每个包都有ADTS头的. ============解决方案1============ 如果是应用的话,直接设置MediaPlayer setDataSource设置为网络音频的uri,然后prepareAsync(), prepare完成后调用start不就可以了吗? framework层的话还是要用aacdecoder进行解码播放,要么用软件解码,要么用硬件解码.

Android 中使用自定义字体的方法

1.Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace 2.在Android中可以引入其他字体 . <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:Android="http://schemas.android.com/apk/res/android" Android:layout_width="fill

Android中加载位图的方法

Android中加载位图的关键的代码: AssetManager assets =context.getAssets(); //用一个AssetManager 对象来从应用程序包的已编译资源中为工程加载资产 InputStream istream=assets.open("/*位图的名字*/"); BitmapFactory.Options options=new BitmapFactory.Options(); options.inPreferredConfig =Bitmap.Co

android中如何显示图片的一部分

android中如何显示图片的一部分 分类: Android应用开发系列教程 Android应用开发技巧 2012-04-25 23:42 1728人阅读 评论(0) 收藏 举报 androidmatrixfloatconstructorclassnull 作者:张宗硕 在android应用程序中加载一张图片,然后把它显示出来这是一件非常容易的事情,那怎么才能显示一张图片的一小部分呢,一种做法是把图片ps一下,要显示的那部分单独存成一张图片,然后程序中加载它,并把它显示出来.但这样会增加程序的图