分享Android实现加载Gif动画的类库


在Android平台下,Google并没有为我们提供显示GIF动画的类库。如果想在Android平台下显示动画效果,可能需要使用到Android提供的animation类来辅助我们创建动画效果,但是这种动画显示的效果并不像gif文件那样理想,animation类创建的动画相对来说比较简单和单一。因此我在网上收集了一些关于在Android平台下显示GIF动画的方法,在这里跟大家一起分享一下。

一、GIF动画分割

在编码之后,需要利用第三方的工具将GIF动画分割成一个个的BMP或JPG格式的图片,再通过Android提供的animation类加载这些图片,以实现动画的效果。其实,说来说去,还是利用animation的方法,而且还需要手动分割GIF图片,很是麻烦!但是这种变相的方法也可以实现这个显示动画的功能了。

这里不堆文字了,直接给出一个链接吧。之前已经说过了,是网上收集的资料,还请各位跳转到下面这个链接:http://www.cnblogs.com/TerryBlog/archive/2010/09/06/1819641.html 如果各位需要转载,请尊重这位博主的劳动成果。

二、GifView类

去看看开发文档吧,找找这个类GifView类,有木有,有木有?结果是木有。对,这是一位N人写的一个加载Gif动画的类,并且已经将该类做成一个jar类库,供开发者直接加载使用。这个类的使用非常方便,跟普通的UI控件ImageView、Button、TextView等的使用方法都是一样的。

1、原理:

我对这个类的核心不分代码详细分析了一下,基本是按照GIF文件格式,将GIF拆分成一个个BMP图像,然后再将这些BMP图片显示出来。原理跟第一种方法是一样的,但是GifView类将分割GIF图像帧的操作放在一个类中,不需要我们过多的关心GIF是如何拆分的,而且GifView类还提供了一个公开的方法,以方便开发者调用。

2、GifView提供的公开方法

设置GIF动画的数据来源:

  
  
/** * 从GIF文件的文件数据加载GIF动画 * @param gif的文件内容 */ public void setGifImage( byte [] gif){ setGifDecoderImage(gif); } /** * 从文件或网络输入流中加载GIF动画 * @param 输入流 */ public void setGifImage(InputStream is){ setGifDecoderImage(is); } /** * * @param resId GIF动画的资源ID */ public void setGifImage( int resId){ Resources r = this .getResources(); InputStream is = r.openRawResource(resId); setGifDecoderImage(is); }

控制GIF动画的显示模式:动态或者静态

  
  
/** * 显示GIF动画的第一帧的图像,也就是不让GIF动起来 */ public void showCover(){ if (gifDecoder == null ) return ; pause = true ; currentImage = gifDecoder.getImage(); invalidate(); }
  
  
/** * 动态显示GIF动画 */ public void showAnimation(){ if (pause){ pause = false ; } }

设置GIF动画的显示比例:

  
  
/** * 设置GIF动画显示的高度和宽度 * @param width * @param height */ public void setShowDimension( int width, int height){ if (width > 0 && height > 0 ){ showWidth = width; showHeight = height; rect = new Rect(); rect.left = 0 ; rect.top = 0 ; rect.right = width; rect.bottom = height; } }

设置GID动画显示的方式:(三种)

先加载后显示:GifImageType.WAIT_FINISH

边加载边显示:GifImageType.SYNC_DECODER

只显示第一帧再显示:GifImageType.COVER

  
  
public void setGifImageType(GifImageType type){ if (gifDecoder == null ) animationType = type; }

3、使用方法

  具体的使用方法,将在文章的最后与GifView类的源代码和jar文件一起放出,这里先跟大家介绍一下。

a、将GifView.jar加入到项目中;

b、在布局文件中加入GifView控件,并设置GifView的基本属性:包括ID、宽度、高度、边距等等,与其他UI类似

  
  
< com.ant.liao.GifView android:id ="@+id/gif1" android:layout_height ="wrap_content" android:layout_width ="wrap_content" android:paddingRight ="14px" android:enabled ="false" />

c、在代码中添加控件实例,并加载显示。

  
  
// 从xml中得到GifView的句柄 gf1 = (GifView) findViewById(R.id.gif1); // 设置Gif图片源 gf1.setGifImage(R.drawable.gif1); // 添加监听器 gf1.setOnClickListener( this ); // 设置显示的大小,拉伸或者压缩 gf1.setShowDimension( 300 , 300 ); // 设置加载方式:先加载后显示、边加载边显示、只显示第一帧再显示 gf1.setGifImageType(GifImageType.COVER);

  以上就是想要介绍的东西,结束之后先给出GifView类的作者的链接,大家可以多多关注,学习更多的技术。向“懒骨头”(CSDN)致敬。http://blog.csdn.net/iamlazybone/archive/2010/10/28/5972234.aspx

附GifView类的源代码和Demo程序:http://u.115.com/file/f648778d4a

由于该类库中的GifDecode.java文件的注释无法正常显示,因此我分析了一下源码,简要的写了一下注释:GifDecode.java ,以便大家在学习的时候更加方便。


下面转自懒骨头博客:

作者:ant.cy.liao

主页:http://code.google.com/p/gifview/

下载:http://code.google.com/p/gifview/downloads/list

简介:android中现在没有直接显示gif的view,只能通过mediaplay来显示,且还常常不能正常显示出来,为此写了这个gifview,其用法和imageview一样

 

使用方法:

1-把GifView.jar加入你的项目。

2-在xml中配置GifView的基本属性,GifView继承自View类,和Button、ImageView一样是一个UI控件。如:

  1. <com.ant.liao.GifView android:id="@+id/gif2"  
  2.     android:layout_height="wrap_content" android:layout_width="wrap_content"  
  3.     android:paddingTop="4px" android:paddingLeft="14px" android:enabled="false" />  
 

3-在代码中配置常用属性:

  1. // 从xml中得到GifView的句柄  
  2.     gf1 = (GifView) findViewById(R.id.gif1);  
  3.     // 设置Gif图片源  
  4.     gf1.setGifImage(R.drawable.gif1);  
  5.     // 添加监听器  
  6.     gf1.setOnClickListener(this);  
  7.     // 设置显示的大小,拉伸或者压缩  
  8.     gf1.setShowDimension(300300);  
  9.     // 设置加载方式:先加载后显示、边加载边显示、只显示第一帧再显示  
  10.     gf1.setGifImageType(GifImageType.COVER);  
 

 

GifView的Jar包共有四个类:

GifAction.java

观察者类,监视GIF是否加载成功

GifFrame.java

里面三个成员:当前图片、延时、下张Frame的链接。

GifDecoder.java

解码线程类

GifView.java

主类,包括常用方法,如GifView构造方法、设置图片源、延迟、绘制等。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值