zoukankan      html  css  js  c++  java
  • android gif

    引用:http://blog.sina.com.cn/s/blog_821e2bb10100tfzd.html

      最近项目中要用到是实现Gif格式的动画,查了查Android压根就不支持Gif动画,于是乎就研究下了开源的“Gifview”。

    一、Gifview简介

    作者:ant.cy.liao

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

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

    一、GIF动画分割

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

    二、GifView类

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

    1、原理:

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

    2、GifView提供的公开方法

    设置GIF动画的数据来源:

        
       
     public void setGifImage(byte[] gif){
            setGifDecoderImage(gif);
        }
       
       
     
       
     public void setGifImage(InputStream is){
            setGifDecoderImage(is);
        }
       
       
     
       
     public void setGifImage(int resId){
            Resources r
     = this.getResources();
            InputStream is
     = r.openRawResource(resId);
            setGifDecoderImage(is);
        }

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


    public void showCover(){
    if(gifDecoder == null)
    return;
    pause
     = true;
    currentImage
     = gifDecoder.getImage();
    invalidate();
    }

    public void showAnimation(){
    if(pause){
    pause
     = false;
    }
    }
     

    设置GIF动画的显示比例:

        
       
     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加入到项目中(不会导入jar包的看这个:http://blog.sina.com.cn/s/blog_821e2bb10100tfup.html);

    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); 
    // 设置显示的大小,拉

  • 相关阅读:
    Python学习札记(十五) 高级特性1 切片
    LeetCode Longest Substring Without Repeating Characters
    Python学习札记(十四) Function4 递归函数 & Hanoi Tower
    single number和变体
    tusen 刷题
    实验室网站
    leetcode 76. Minimum Window Substring
    leetcode 4. Median of Two Sorted Arrays
    leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions 、434. Number of Islands II(lintcode) 并查集 、178. Graph Valid Tree(lintcode)
    刷题注意事项
  • 原文地址:https://www.cnblogs.com/sode/p/3041539.html
Copyright © 2011-2022 走看看