转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/75578109

本文出自【赵彦军的博客】

起因

最近在项目中遇到需要在界面上显示一个本地的 GIF 图。按照惯例我直接用了 Glide 框架来实现。

Glide 地址: https://github.com/bumptech/glide

我用的 Glide版本为 4.0.0-RC1 , 具体的实现代码如下:

 Glide.with( this ).asGif().load( R.drawable.yiba_location ).into( location_image ) ;

运行的效果很卡顿,我怀疑是不是方法没有用对,调了压缩模式,还是卡顿;调了缓存模式,还是卡顿。看了一下我的 gif 图,大小还是 800K ,是不是图片太大了,换了一张 100K 的 gif 图,这次显示的效果很好,gif 图播放的很流畅。至此,得出结论:Glide 框架自身的原因,播放大尺寸的 Gif 图的效果不是很理想。

方案

Glide 不行,那么就要另想其他方案,就去 github 上找一下。

排名第一的 android-gif-drawable 库 start 有 4.8K , 这个应该不错,试试吧。

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

引用:

 compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.7'

直接把布局文件中的 ImageView 替换为 GifImageView

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

运行起来看看,果然很好啊,播放的很流畅,果断采用此方案。

探寻其他的属性:

GifImageView gifImageView = (GifImageView) findViewById(R.id.gifImageView);

GifDrawable gifDrawable = (GifDrawable) gifImageView.getDrawable();

通过 GifImageView 对象获取到 GifDrawable 对象。

gifDrawable.start(); //开始播放

gifDrawable.stop(); //停止播放

gifDrawable.reset();  //复位,重新开始播放

gifDrawable.isRunning(); //是否正在播放

gifDrawable.setLoopCount( 2 ); //设置播放的次数,播放完了就自动停止

gifDrawable.getCurrentLoop(); //获取正在播放的次数

gifDrawable.getCurrentPosition ; //获取现在到从开始播放所经历的时间

gifDrawable.getDuration() ; //获取播放一次所需要的时间


个人微信号:zhaoyanjun125 , 欢迎关注

Android 加载GIF图最佳实践的更多相关文章

  1. React-Native 之 GD (二十)removeClippedSubviews / modal放置的顺序 / Android 加载git图\动图 / 去除 Android 中输入框的下划线 / navigationBar

    1.removeClippedSubviews 用于提升大列表的滚动性能.需要给行容器添加样式overflow:’hidden’.(Android已默认添加此样式)此属性默认开启 这个属性是因为在早期 ...

  2. Android 高清加载巨图方案 拒绝压缩图片

    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自:[张 ...

  3. Android 高清加载巨图方案, 拒绝压缩图片

    源地址:http://blog.csdn.net/lmj623565791/article/details/49300989 一.概述 距离上一篇博客有段时间没更新了,主要是最近有些私事导致的,那么就 ...

  4. Android内存优化————加载长图

    项目中总会遇到加载长图的需求,图片的长度可能是手机长度的很多倍,也就是需要通过滑动来查看图片.比较简单的实现方式就是使用ScrollView来加载长图,但是这样做有一个很严重的问题,就是内存消耗严重. ...

  5. 图片--Android加载图片导致内存溢出(Out of Memory异常)

    Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...

  6. 简易仿ios菊花加载loading图

    原文链接:https://mp.weixin.qq.com/s/wBbQgOfr59wntNK9ZJ5iRw 项目中经常会用到加载数据的loading显示图,除了设计根据app自身设计的动画loadi ...

  7. Android 加载大图

    在 Android 开发中, Bitmap 是个吃内存大户,稍微操作不当就会 OOM .虽然现在第三方的图片加载库已经很多,很完善,但是作为一个 Androider 还得知道如何自己进行操作来加载大图 ...

  8. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】

    Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)[系列1] Android在加载或者处理超大巨型图片 ...

  9. SurfaceView加载长图

    1:SurfaceView加载长图,移到.可以充当背景 效果截图 2:View (淡入淡出动画没实现:记录下) package com.guoxw.surfaceviewimage; import a ...

随机推荐

  1. 03_Weblogic之配置简单域:启动和配置域,使用模板创建域,使用控制台

     1 域:概览 是Oracle Weblogic Server的基本管理单元 始终包含一个配置为管理服务器的Oracle WebLogic Server实例 域中可以包括一些称为受管服务器的Ora ...

  2. Java实现二叉树的创建和遍历操作(有更新)

    博主强烈建议跳过分割线前面的部分,直接看下文更新的那些即可. 最近在学习二叉树的相关知识,一开始真的是毫无头绪.本来学的是C++二叉树,但苦于编译器老是出故障,于是就转用Java来实现二叉树的操作.但 ...

  3. 方便使用FFMPEG的经验

    FFMPEG是命令行工具,因此使用起来多少还是会有些不方便.在这记录两点方便使用FFMPEG的方法: 1.任何目录下都可以使用FFMPEG 问题描述:需要转码(播放)的时候,需要把ffmpeg.exe ...

  4. 从"按层次输出二叉树"到"求解二叉树深度"的总结

    本文是在学习中的总结,欢迎转载但请注明出处:http://write.blog.csdn.net/postedit/41964669 最近在刷LeetCode上的算法题,发现好多题目的解题思路大体是一 ...

  5. Understanding and Using HRMS Security in Oracle HRMS

    Understanding and Using HRMS Security in Oracle HRMS Product:Oracle Human Resources Minimum Version: ...

  6. Git添加文件改动时出错

    原来的主文件夹中替换了3个子文件夹,每个子文件夹有若干同名文件,总共替换了大概200多个文件吧. 然后在git主文件夹中使用git add .指令出现如下错误: apple@kissAir: iOS$ ...

  7. redis学习资料

    http://www.it168.com/redian/redis/ http://down.51cto.com/data/836008 http://www.redis.cn/

  8. 01_JNI是什么,为什么使用,怎么用JNI,Cygwin环境变量配置,NDK案例(使用Java调用C代码),javah命令使用

    1 什么是JNI JNI Java本地开发接口 JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(C/C++) 通过这个协议,java代码就可以调用外部的C/C++代码,外部的C/C++ ...

  9. Linux - gcc 的简易用法 (编译、参数与链结)

    # 仅将原始码编译成为目标档,并不制作连结等功能: [root@www ~]# gcc -c hello.c # 会自动的产生 hello.o 这个文件,但是并不会产生 binary 运行档. # 在 ...

  10. Android+struts2+json方式模拟手机登录功能

    涉及到的知识点: 1.Struts2框架的搭建(包括Struts2的jSON插件) 2.Android前台访问Web采用HttpClient方式. 3.Android采用JSON的解析. 服务端主要包 ...