android原生的控件是不支持gif动图播放的,所以这就需要我们自己去自定义控件。网上搜到比较多的控件是gifview,但是呢,这个播放gif的原理是是将gif的每一帧解析成bitmap,然后通过线程去不停的切换图片。这个方法带来的问题是,bitmap是很占用内存的,有时候虽然gif占用的内存不是很大,但是如果帧数很多,再转换成bitmap,好家伙内存呼啦啦的网上涨,有时候两三张,甚至一张内存就要溢出了,后来这种方法就被我放弃了,因为我们的项目中gif动图是放在listview中的,这种方法肯定不行,后来 在github上发现了一个开源项目android-gif-drawable

地址:https://github.com/koral--/android-gif-drawable

这个方法使用了jni技术,使得占用的内存相对来说比较优秀,下面就来介绍他的用法吧。

首先就是要下载jar包,解压之后有下面几个文件:

classes.jar就是我们需要的jar包了,直接放到android项目中的libs文件夹中,光有这一步 我们的准备工作还没有做好哦,下面打开jni文件夹有如下文件:

废话不多说,直接复制到libs文件中,好的,准备工作做完了,下面就可以调用该类库进行gif图片的播放了。

使用要在你的布局文件中,定义该控件

首先要想让控件能播放gif需要先给控件一个GifDrawable,下面是官方文档给的gifdrawable构造函数说明:

//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 ); 好的下面直接调用setImageDrawable就行了。这个jar包给的方法还是很多的,大家根据官方文档,在结合自己的需求去学习使用吧。

android 播放gif会闪,android 播放gif动图相关推荐

  1. android编程中添加gif,Android应用开发之【Android】使用android-gif-drawable包加载GIF动图...

    本文将带你了解Android应用开发之[Android]使用android-gif-drawable包加载GIF动图,希望本文对大家学Android有所帮助. [导包] 首先需要导入android-g ...

  2. 小程序影藏溢出的gif_如何在Android手机上快速实现视频转GIF动图呢?

    毫无疑问,Android是目前使用最广泛的手机系统.GIF很有趣,并且比视频占用更少的存储容量.本文将向您介绍如何在Android手机上快速转GIF动图的多种方法. [官网]万兴优转 - 顶尖音视频格 ...

  3. html gif循环播放,Easy GIF Animator 7设置gif动图循环播放次数的方法

    gif动态图在我们的生活中是十分常见的,很多小伙伴们在使用聊天工具的时候都会使用一些 动态的表情包,这些表情包文件给我们的了解增加了很多的乐趣.不知道大家在使用这些表情包的时候是否有发现这样的一种情况 ...

  4. android 视频转表情包,视频转gif动图怎么转?一款能制作表情包的软件,年轻人很爱用...

    视频转gif动图怎么转?现如今,很多年轻人都喜欢用表情包来进行社交聊天.迅捷视频转换器功能强大,是一款可以制作出有趣表情包的软件.如果你刚好也想制作出自己喜欢的表情包,继续往下看会得到满意答案哦. 打 ...

  5. Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

    Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...

  6. Android实现音乐播放器,Service后台播放Notification控制播放状态

    本音乐播放器的功能: 1.实现访问手机本地的.mp3音乐文件: 2.在主页中将访问的数据显示出来(这里简单点用ListView,用RecycleView当然也可以): 3.在播放音乐页面实现上一首.下 ...

  7. Android中Video的三种播放方式的实现

     在Android中,我们有三种方式来实现视频的播放. 1.使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2.使用VideoView来 ...

  8. Android之一起制作简易唱片播放器

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/50789666 本文出自:[顾林海的博客] ####扯蛋篇 这几由于智齿 ...

  9. 简单android音乐播放器课程设计,android音乐播放器课程设计报告.doc

    android音乐播放器课程设计报告 android音乐播放器课程设计报告 基于Android音乐播放器的设计与实现 滨江学院 <移动通信程序设计> 课程设计 题 目 院 系 专 业学生姓 ...

  10. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)

    Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...

最新文章

  1. 收集的一些操作系统面试题
  2. javascript中的事件冒泡、事件捕获和事件执行顺序
  3. pythonpandas用sql查询数据表_pandas从数据库读取数据
  4. memcached+keepalived+magent高群集
  5. jdbc连接sqlserver,mysql,oracle
  6. html第一章咖啡作业,CSS基础选择器温故-1 - 怪诞咖啡
  7. 大数据技术在物流中的应用
  8. [悟] 因上努力,果上随缘(转)
  9. (转)STM32学习笔记(3):系统时钟和SysTick定时器
  10. CDR插件开发之Addon插件004 - VS2022开发环境简介及个性化配置
  11. 基于Springboot实现英语在线学习系统
  12. 把握人类的八大本能,让你拥有“营销作弊器”
  13. IOS 5 自定义导航条背景图片
  14. 三星6.0系统机器(亲测有效)激活XPOSED框架的流程
  15. LATEX使用 图文混排,文字环绕插图
  16. RTL8821CS移植过程记录
  17. 新锐任务宝推广渠道推荐
  18. win10系统要求配置_win10的配置要求是什么?对电脑硬件有什么要求?
  19. NOMSQL数据库之Mongodb
  20. visual studio code无法生成可执行文件

热门文章

  1. java 清理页面缓存数据_清除浏览器缓存的几种方法总结(必看)
  2. MAC版SecureCRT+SecureFX破解
  3. mysql 删除不了库
  4. BI财务分析 – 反映盈利水平利润占比的指标如何分析(上)
  5. vue实现table课程表
  6. 【邮箱】Foxmail中如何登陆网易邮箱?
  7. 英国政府收购SpaceX竞争对手背后,蕴藏着多大的野心?
  8. C语言中不同类型之间的混合运算
  9. 逃离北上广:你以为回到小城市就非常幸福了吗?
  10. MQ 是什么?为什么使用?