(android开源库android-gif-drawable)第一篇 eclipse使用这个开源库

如果想显示gif图片 推荐使用Glide开源库

android-gif-drawable我就不推荐了

android开源库android-gif-drawable的使用

android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的gif图片 不会内存溢出,于是我就想试试这个开源库,我下了作者的源代码和例子,但是我却跑不起来。不知道为什么,我又到网上去找使用这个开源库的例子发现有一个,我也下载了下来,发现还是跑不起来。我决定自己好好试试这个源代码,终于在我的努力下现在可以用了。废话完了 现在教大家怎么用这个库。大家不想看怎么做的 可以到后面下载DEMO代码。

1.android-gif-drawable的源代码下载地址:https://github.com/koral--/android-gif-drawable

2.点开它,如下图所示

3.点击下载后,我们可以看到下面这个界面 PS:是下载.aar文件 我写错了

4.下载好这个文件后,我们右键选择打开方式为

5.然后解压这个文件到一个空的文件夹,复制也可以

6.然后得到如下

7.点开jni文件夹得到如下

8.复制这4个文件夹和开源库的JAR包(classes.jar)到你android代码中位置如下图所示

9.下面是作者教大家的使用方法

PS: 想看原版的   请到这里来看:https://github.com/koral--/android-gif-drawable

From XML

The simplest way is to use GifImageView (or GifImageButton) like a normal ImageView:

<pl.droidsonroids.gif.GifImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/src_anim"
    android:background="@drawable/bg_anim"
    />

If drawables declared by android:src and/or android:background are GIF files then they will be automatically recognized as GifDrawables and animated. If given drawable is not a GIF then mentioned Views work like plainImageView and ImageButton.

GifTextView allows you to use GIFs as compound drawables and background.

<pl.droidsonroids.gif.GifTextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:drawableTop="@drawable/left_anim"
    android:drawableStart="@drawable/left_anim"
    android:background="@drawable/bg_anim"
    />

From Java code

GifImageView, GifImageButton and GifTextView have also hooks for setters implemented. So animated GIFs can be set by calling setImageResource(int resId) and setBackgroundResource(int resId)

GifDrawable can be constructed directly from various sources:

//asset file
        GifDrawable gifFromAssets = new GifDrawable( getAssets(), "anim.gif" );

        //resource (drawable or raw)
        GifDrawable gifFromResource = new GifDrawable( getResources(), R.drawable.anim );

        //byte array
        byte[] rawGifBytes = ...
        GifDrawable gifFromBytes = new GifDrawable( rawGifBytes );

        //FileDescriptor
        FileDescriptor fd = new RandomAccessFile( "/path/anim.gif", "r" ).getFD();
        GifDrawable gifFromFd = new GifDrawable( fd );

        //file path
        GifDrawable gifFromPath = new GifDrawable( "/path/anim.gif" );

        //file
        File gifFile = new File(getFilesDir(),"anim.gif");
        GifDrawable gifFromFile = new GifDrawable(gifFile);

        //AssetFileDescriptor
        AssetFileDescriptor afd = getAssets().openFd( "anim.gif" );
        GifDrawable gifFromAfd = new GifDrawable( afd );

        //InputStream (it must support marking)
        InputStream sourceIs = ...
        BufferedInputStream bis = new BufferedInputStream( sourceIs, GIF_LENGTH );
        GifDrawable gifFromStream = new GifDrawable( bis );

        //direct ByteBuffer
        ByteBuffer rawGifBytes = ...
        GifDrawable gifFromBytes = new GifDrawable( rawGifBytes );

InputStreams are closed automatically in finalizer if GifDrawable is no longer needed so you don't need to explicitly close them. Calling recycle() will also close underlaying input source.

Note that all input sources need to have ability to rewind to the begining. It is required to correctly play animated GIFs (where animation is repeatable) since subsequent frames are decoded on demand from source.

Animation control

GifDrawable implements an Animatable and MediaPlayerControl so you can use its methods and more:

  • stop() - stops the animation, can be called from any thread
  • start() - starts the animation, can be called from any thread
  • isRunning() - returns whether animation is currently running or not
  • reset() - rewinds the animation, does not restart stopped one
  • setSpeed(float factor) - sets new animation speed factor, eg. passing 2.0f will double the animation speed
  • seekTo(int position) - seeks animation (within current loop) to given position (in milliseconds) Only seeking forward is supported
  • getDuration() - returns duration of one loop of the animation
  • getCurrentPosition() - returns elapsed time from the beginning of a current loop of animation

Using MediaPlayerControl

Standard controls for a MediaPlayer (like in VideoView) can be used to control GIF animation and show its current progress.

Just set GifDrawable as MediaPlayer on your MediaController like this:

@Override
    protected void onCreate ( Bundle savedInstanceState )
    {
        super.onCreate( savedInstanceState );
        GifImageButton gib = new GifImageButton( this );
        setContentView( gib );
        gib.setImageResource( R.drawable.sample );
        final MediaController mc = new MediaController( this );
        mc.setMediaPlayer( ( GifDrawable ) gib.getDrawable() );
        mc.setAnchorView( gib );
        gib.setOnClickListener( new OnClickListener()
        {
            @Override
            public void onClick ( View v )
            {
                mc.show();
            }
        } );
    }

Retrieving GIF metadata

  • getLoopCount() - returns a loop count as defined in NETSCAPE 2.0 extension
  • getNumberOfFrames() - returns number of frames (at least 1)
  • getComment() - returns comment text (null if GIF has no comment)
  • getFrameByteCount() - returns minimum number of bytes that can be used to store pixels of the single frame
  • getAllocationByteCount() - returns size (in bytes) of the allocated memory used to store pixels of given GifDrawable
  • getInputSourceByteCount() - returns length (in bytes) of the backing input data
  • toString() - returns human readable information about image size and number of frames (intended for debugging purpose)
10.DEMO下载地址:http://pan.baidu.com/s/1gdd27v1
时间: 2024-10-30 11:31:40

(android开源库android-gif-drawable)第一篇 eclipse使用这个开源库的相关文章

Android开源项目第一篇——个性化控件(View)篇

本文为那些不错的Android开源项目第一篇--个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialog.Toast.EditText.TableView.Activity Animation等等. 本文中你可以找到那些精美App中各种有特性的View,如Gmail的左滑出菜单.Google plus的卡片式L

Gradle for Android第一篇( 从Gradle和AS开始 )

正如大家所见,这是本英文书,而由于国内的gradle翻译资料不全,所以特次开辟专栏,翻译gradle for android这本书,同时添加自己的心得体会以及在实际工作上的实战,希望大家能够喜欢. 如果你是名Android开发新手,或者是名从eclipse切换到Android studio的新手,那么我强烈建议您follow我的文章,正如封面所见,利用gradle构建工具来自动构建你的Android项目.废话不多说,我们直接开始吧. 今天主要介绍Android studio工具的使用,以及cra

[Android]Google 开源的 Android 排版库:FlexboxLayout

最近Google开源了一个项目叫「FlexboxLayout」. 1.什么是 Flexbox 简单来说 Flexbox 是属于web前端领域CSS的一种布局方案,是2009年W3C提出了一种新的布局方案,可以简便.完整.响应式地实现各种页面布局,并且 React Native 也是使用的 Flex 布局. 你可以简单的理解为 Flexbox 是CSS领域类似 Linearlayout 的一种布局,但是要比 Linearlayout 要强大的多. 2.什么是 FlexboxLayout? 刚才说了

Android实战教程第一篇之最简单的计算器_Android

从今天开始,本专栏持续更新Android简易实战类博客文章.和以往专栏不同,此专栏只有实例.每个实例尽量按照知识点对应相应一章节的内容去写,循序渐进.有些实例可能会与另一个专栏有重复的文章. 开始本专栏的第一个简易案例: 首先设置两个布局文件,一个布局文件进行输入数据,获取加法运算:另一个布局文件进行显示最终结果.Activity1启动Activity2,并传递计算结果值给Activity2. main.xml: <?xml version="1.0" encoding=&quo

【Android】GitHub Android 开源项目汇总

参考网址:http://blog.csdn.net/ithomer/article/details/8882236 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上.基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要.利用这些项目,有时能够让你达到事半功倍的效果. 1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个

Android图片压缩上传之基础篇_Android

在android程序开发中我们经常见到需要上传图片的场景,在这里有个技术点,需要把图片压缩处理,然后再进行上传.这样可以减少流量的消耗,提高图片的上传速度等问题. 关于android如何压缩,网上的资料也是很多,但大多数都是代码片段,讲解压缩步骤,而没有一个实用的工具类库.那么如何将压缩算法封装成一个实用工具库呢?其中会遇到些什么问题,比如: 1.需要压缩的图片有多少 2.压缩后的图片是覆盖还是保存到另外的目录 3.如果是另存目录需要将原始图片删除吗 4.如果改变压缩后的图片的尺寸大小是按照原图

Android图片压缩上传之基础篇

在android程序开发中我们经常见到需要上传图片的场景,在这里有个技术点,需要把图片压缩处理,然后再进行上传.这样可以减少流量的消耗,提高图片的上传速度等问题. 关于android如何压缩,网上的资料也是很多,但大多数都是代码片段,讲解压缩步骤,而没有一个实用的工具类库.那么如何将压缩算法封装成一个实用工具库呢?其中会遇到些什么问题,比如: 1.需要压缩的图片有多少 2.压缩后的图片是覆盖还是保存到另外的目录 3.如果是另存目录需要将原始图片删除吗 4.如果改变压缩后的图片的尺寸大小是按照原图

开源中国 Android 客户端 v2.8.4 代码开源

接着前天正式发布开源中国 Android 客户端 v2.8.4 之后,今天我们给大家带来该版本全部源码,敬请各位笑纳! 获取开源中国客户端 Android 版源码,请访问码云:http://git.oschina.net/oschina/android-app 前天发布版本的时候已经提到过,这个版本中主要的变化有: 新增:开源热评功能.在资讯.博客的评论中找到自己喜欢的评论并点击分享,可以邀请好友一起参与开源热评.(先剧透一下:很快会有热评奖项等着你哦) 改进:线下活动报名.签到流程.为了方便众

开源中国Android客户端v2.6.3代码开源

上周开源中国Android客户端发布了v2.6.3新版,这个地球人都知道啦! 今天,万众瞩目的客户端源码正式开源. 请大家访问码云并通过git来克隆最新代码: http://git.oschina.net/oschina/android-app/tree/master/ 大家都知道,开源中国秉承自由.开放.分享的精神,每次客户端升级之后代码都会在第一时间开源,以供大家查阅.学习.批评.指正.所以,遇到有问题或更好的建议时,请大家通过码云issue来向我们反馈. 当然,客户端小组童鞋更希望广大OS