• Android下加载Gif动画的类库


      又是好久没有写博客了,感觉自己再不写点东西,就无法沉淀知识了。但是这几天苦于工作繁忙,和遇到了学习瓶颈,所以博客一直都没有更新。不过最近几天在实现一个手机防盗的软件,就是手机遗失后,可以通过短信的方法获取到你遗失的手机的位置。但是效果不是很理想,所以一直都没有敢在博客上记录下来。如果各位童鞋有好的想法,欢迎你们跟我交流和讨论。通过站内短消息或者邮箱,都可以的:crazypebble.android@gmail.com。

      好了,扯淡结束,现在开始进入正题了,希望大家不要介意我发了这么多的牢骚~主要是向跟大家分享一下自己目前的心情。下面我们进入正题吧。  

      在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 ,以便大家在学习的时候更加方便。


    作者:CrazyPebble
    出处:http://crazypebble.cnblogs.com/
    欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    [恢]hdu 1517
    [恢]hdu 1847
    [恢]hdu 2189
    XHTML学习资料(二)
    基于ASP.NET的lucene.net全文搜索(一)
    XHTML学习资料(三)—— 表格
    ASP.NET中的Menu控件的应用
    基于ASP.NET的lucene.net全文搜索(二)
    EasyFas开源t框架说明
    动态解析XML生成EXCEL
  • 原文地址:https://www.cnblogs.com/crazypebble/p/2023857.html
Copyright © 2020-2023  润新知