目前支持Gif播放的开源库还是有的,试了一下还是这种好用点,所以来分享下
android-gif-drawable是通过JNI来渲染帧的,这种方式比使用WebView或者Movie效率要高

要求
Android 4.2+(API级别17+)
用于GifTextureView硬件加速渲染
适用于GifTexImage2DOpenGL ES 2.0+

效果图:

GifDrawable 可以直接从各种来源构建:

//资产文件
GifDrawable gifFromAssets = new GifDrawable(getAssets(), “ anim.gif ”); //资源(可拉伸或原始)
GifDrawable gifFromResource = 新 GifDrawable(getResources(), - [R 。可拉伸。阿尼姆); // Uri
ContentResolver contentResolver = ... //对于file可以为null:// Uris
GifDrawable gifFromUri = new GifDrawable(contentResolver,gifUri); // byte array
byte [] rawGifBytes = ...
GifDrawable gifFromBytes = new GifDrawable(rawGifBytes); // FileDescriptor
FileDescriptor fd = new RandomAccessFile( “/ path/anim.gif ”, “ r ”)。getFD();
GifDrawable gifFromFd = new GifDrawable(fd); //文件路径
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(必须支持标记)
InputStream sourceIs = ...
BufferedInputStream bis = new BufferedInputStream(sourceIs, GIF_LENGTH);
GifDrawable gifFromStream = new GifDrawable(bis); // direct ByteBuffer
ByteBuffer rawGifBytes = ...
GifDrawable gifFromBytes = new GifDrawable(rawGifBytes);

效果图代码:

 <pl.droidsonroids.gif.GifImageView
android:id="@+id/gif_image_view1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/gif1" />
  GifImageView gifImageView1= findViewById(R.id.gif_image_view1);

   File file = new File("/storage/emulated/0/Android/data/com.zhangqie.gif/cache/thumb/SpiderDressUp.gif");
try {
//file方式
//GifDrawable gifFromPath = new GifDrawable(file); //直接给地址
GifDrawable gifFromPath = new GifDrawable("/storage/emulated/0/Android/data/com.zhangqie.gif/cache/thumb/SpiderDressUp.gif");
gifImageView1.setImageDrawable(gifFromPath);
} catch (IOException e) {
e.printStackTrace();
} /*gifDrawable.start(); //开始播放
gifDrawable.stop(); //停止播放
gifDrawable.reset(); //复位,重新开始播放
gifDrawable.isRunning(); //是否正在播放
gifDrawable.setLoopCount( 2 ); //设置播放的次数,播放完了就自动停止
gifDrawable.getCurrentLoop(); //获取正在播放的次数
gifDrawable.getCurrentPosition() ; //获取现在到从开始播放所经历的时间
gifDrawable.getDuration() ; //获取播放一次所需要的时间
gifDrawable.recycle();//释放内存*/ 点击事件 @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
gifDrawable.stop();
break;
case R.id.btn2:
gifDrawable.start();
break;
}
}

代码文档:https://github.com/koral--/android-gif-drawable

android -------- GifImageView 之gif图片加载的更多相关文章

  1. Android中常见的图片加载框架

    图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...

  2. Android项目框架之图片加载框架的选择

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 从Android爆发以后,自定义的控件如EditTextWithDelete.ActionBar.P ...

  3. Android RecyclerView 滑动时图片加载的优化

    RecyclerView 滑动时的优化处理 在滑动时停止加载图片,在滑动停止时开始加载图片,这里用了Glide.pause 和Glide.resume.这里为了避免重复设置增加开销,设置了一个标志变量 ...

  4. android一句话搞定图片加载

    http://square.github.io/picasso/ Picasso.with(context).load("http://i.imgur.com/DvpvklR.png&quo ...

  5. Android之图片加载框架Fresco基本使用(二)

    PS:最近看到很多人都开始写年终总结了,时间过得飞快,又到年底了,又老了一岁. 学习内容: 1.进度条 2.缩放 3.ControllerBuilder,ControllerListener,Post ...

  6. Android之图片加载框架Fresco基本使用(一)

    PS:Fresco这个框架出的有一阵子了,也是现在非常火的一款图片加载框架.听说内部实现的挺牛逼的,虽然自己还没研究原理.不过先学了一下基本的功能,感受了一下这个框架的强大之处.本篇只说一下在xml中 ...

  7. Android 框架练成 教你打造高效的图片加载框架(转)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41874561,本文出自:[张鸿洋的博客] 1.概述 优秀的图片加载框架不要太多, ...

  8. Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide

    一.ImageLaoder介绍 << Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹ass ...

  9. Android图片加载库的理解

    前言     这是“基础自测”系列的第三篇文章,以Android开发需要熟悉的20个技术点为切入点,本篇重点讲讲Android中的ImageLoader这个库的一些理解,在Android上最让人头疼是 ...

随机推荐

  1. windows下binlog问题解决

    1.先确定mysql是否开启了binlog show binary logs; 默认情况下是不开启的 2.如何开启 在my.ini配置下添加两个参数 # Binary Logginglog-bin=m ...

  2. Flask入门到放弃(四)—— 数据库

    转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10979970.html 数据库操作 ORM ORM 全拼Object-Relation Mappi ...

  3. django中使用AJAX时如何获取表单参数(按钮携带参数)

    前提是函数和相应的视图路由都已经配置好了,然后就是表单了: <form id="SmsForm" method="post" class="a& ...

  4. Docker02-重要概念

    目录 Docker简介 思考 Docker是什么 Docker 解决了什么问题 Docker 的优点 Docker的目的 Docker常用场景 虚拟化和Docker的对比 Docker的架构 Dock ...

  5. golang错误处理

    1. 错误 错误用内建的error类型来表示. type error interface { Error() string } error 有了一个签名为 Error() string 的方法.所有实 ...

  6. 如何临时修改 macOS 应用的界面语言?

    一般情况下,应用程序的界面语言会和系统语言保持一致.但有些时候,我们也会希望临时换用一种不同的界面语言.例如,一些程序的中文翻译词不达意,有必要参考英文界面来确定功能的准确含义:又如,一些网页会强制按 ...

  7. HDU4814——数学,模拟进制转换

    本题围绕:数学公式模拟进制转换 HDU4814 Golden Radio Base 题目描述 将一个十进制的非负整数转换成E(黄金分割数)进制的数 输入 不大于10^9的非负整数,处理到文件尾 输出 ...

  8. Linux 设置系统编码

    1.locale -a查看系统支持的语言2.进入etc/sysconfig/3.编辑i18n4.修改lang ​5.设置完成后刷新:i18n source /etc/sysconfig/i18n

  9. Python的logging模块基本用法

    Python 的 logging 模块的简单用法 在服务器部署时,往往都是在后台运行.当程序发生特定的错误时,我希望能够在日志中查询.因此这里熟悉以下 logging 模块的用法. logging 模 ...

  10. c#中的多态学习总结

    c#的多台方法,大体上和c++的类似,但是有点区别的,我这里刚刚初学,因此把重点记录下. 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性意味着有多重形式.在面向对象编程范式中,多态性往往表 ...