Gif动画,我使用了三种方式

1.自定义控件加载gif动画

①.首先自定义一个GifView,用于显示Gif图片,具体代码如下:

public class GifView extends View {private Resources resources;private Movie mMovie;private long mMovieStart;private float ratioWidth;private float ratioHeight;public GifView(Context context) {this(context,null);}public GifView(Context context, @Nullable AttributeSet attrs) {this(context, attrs,0);}public GifView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {setLayerType(View.LAYER_TYPE_SOFTWARE, null);}resources = context.getResources();TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.GifView);int resourceId = ta.getResourceId(R.styleable.GifView_src, -1);setGifResource(resourceId);ta.recycle();}public void setGifResource(int resourceId) {if (resourceId==-1){return;}InputStream is = resources.openRawResource(resourceId);mMovie = Movie.decodeStream(is);requestLayout();}public  void setGifStream(InputStream is){mMovie = Movie.decodeStream(is);requestLayout();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);if (mMovie!=null){int w = mMovie.width();int h = mMovie.height();if (w<=0){w=1;}if (h<=0){h=1;}int pLeft = getPaddingLeft();int pRight = getPaddingRight();int pTop = getPaddingTop();int pBottom = getPaddingBottom();int widthSize;int heightSize;w+=pLeft+pRight;h+=pTop+pBottom;w=Math.max(w,getSuggestedMinimumWidth());h=Math.max(h,getSuggestedMinimumHeight());widthSize= resolveSizeAndState(w,widthMeasureSpec,0);heightSize= resolveSizeAndState(h,heightMeasureSpec,0);ratioWidth = (float) widthSize/w;ratioHeight = (float) heightSize/h;setMeasuredDimension(widthSize,heightSize);}else{super.onMeasure(widthMeasureSpec, heightMeasureSpec);}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);long now = SystemClock.uptimeMillis();if (mMovieStart ==0){ //第一次进入mMovieStart =now;}if (mMovie!=null){int dur = mMovie.duration();if (dur==0){dur=1000;}int relTime= (int) ((now-mMovieStart)%dur);mMovie.setTime(relTime);//  mMovie.draw(canvas,0,0);float scale=Math.min(ratioWidth,ratioHeight);canvas.scale(scale,scale);mMovie.draw(canvas,0,0);invalidate();}}
}

②.在布局文件中添加自定义的控件,我这加了两个,第一个展示assets文件中的gif图片,一个展示drawable中的gif图片

 <com.example.wen.adroid.view.GifViewandroid:id="@+id/gv_photo"android:layout_width="match_parent"android:layout_weight="1"android:layout_gravity="center"android:layout_height="0dp"/><com.example.wen.adroid.view.GifViewandroid:id="@+id/gv_local_photo"android:layout_width="match_parent"android:layout_weight="1"android:layout_gravity="center"android:layout_height="0dp"app:src="@drawable/gifphoto"/>

③.展示gif图片,具体代码如下:

         //方法一 使用自定义gifview播放gif图片mGvLocalPhoto = (GifView) findViewById(R.id.gv_local_photo);mGvPhoto = (GifView) findViewById(R.id.gv_photo);try {InputStream is = getAssets().open("assetphoto.gif");mGvPhoto.setGifStream(is);} catch (IOException e) {e.printStackTrace();}

2.使用Glide加载gif动画

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

①.首先配置build.gradle

 compile 'com.github.bumptech.glide:glide:3.7.0'

②.配置好Glide之后,然后通过基本的用法去加载,加载代码如下:

// 使用Glide播放gif图片mIvPhoto = (ImageView) findViewById(R.id.iv_photo);Glide.with(this).load(R.drawable.gifphoto).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(mIvPhoto);

注意:diskCacheStrategy是为其添加缓存策略,其中缓存策略可以为:Source及None,None及为不缓存,Source缓存原型。

3.使用android-gif-drawable加载gif动画

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

①.首先配置build.gradle

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

②.在xml中添加GifImageView控件

<pl.droidsonroids.gif.GifImageViewandroid:id="@+id/giv_photo"android:layout_width="match_parent"android:layout_weight="1"android:layout_height="0dp"android:src="@drawable/gifphoto"/>

③.调用android-gif-drawable

 //使用android-gif-drawable 库GifImageView mGifIvPhoto = (GifImageView) findViewById(R.id.giv_photo);try {//加载asset文件中的gif图片GifDrawable gif = new GifDrawable(getAssets(), "assetphoto.gif");mGifIvPhoto.setImageDrawable(gif);} catch (IOException e) {e.printStackTrace();}

Android开发中加载Gif动画图片方法相关推荐

  1. ios加载本地html懒加载图片方案,IOS开发中加载大量网络图片优化方法

    IOS开发中加载大量网络图片如何优化 1.概述 在IOS下通过URL读一张网络图片并不像其他编程语言那样可以直接把图片路径放到图片路径的位置就ok,而是需要我们通过一段类似流的方式去加载网络图片,接着 ...

  2. android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果

    有时候我们对自己开发的项目经常不满意,但是我们要达到自定义刷新动画的效果有一定的难度,别着急,下面爱站技术频道和大家分享Android开发中MJRefresh自定义刷新动画效果,一起来学习吧! [一] ...

  3. android 最新 九宫格,Android开发中怎么显示一个九宫格图片

    Android开发中怎么显示一个九宫格图片 发布时间:2020-11-21 15:09:33 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关Android开发中怎么显示一个九宫格 ...

  4. android 浏览器打开本地html文件,如何在Android浏览器中加载本地HTML文件

    我试图在设备浏览器中加载本地html文件.我尝试过使用WebView,但它不适用于所有设备.如何在Android浏览器中加载本地HTML文件 //WebView method that didnt w ...

  5. AE中加载个人数据库GDB方法探讨

    AE中加载个人数据库GDB方法探讨 下面对AE中加载个人数据库的方法做一个总结: 个人数据库是保存在Access中的数据库.其加载方式有两种:通过名字和通过属性加载(也许不只这两种,AE中实现同一功能 ...

  6. 基于 GoogleMap 离线 API 源码在内网中加载卫星地图的方法

    1. 概述 我们之前为大家分享过在三维地球开源平台离线加载卫星影像的方法,主要包括基于桌面端的OsgEarth开源三维地球和基于Web端的Cesium开源三维地球等平台的局域网离线加载. 另外,也为大 ...

  7. iphone iPhone开发中为UINavigationBar设置背景图片方法

    1:原文摘自:http://mobile.51cto.com/iphone-284865.htm iPhone开发中为UINavigationBar设置背景图片方法是本文要介绍的内容,在iPhone开 ...

  8. 在WPF中加载gif动态图片

    向WPF中加载动态图片有很多种办法,下面介绍一种比较简单的办法. 右键项目,在管理程序包中添加XamlAnimatedGif包,进行安装. . 在设计文件中添加头文件XamlAnimatedGif的头 ...

  9. Android 花里胡哨的加载Loading动画

    记录查找了一些实用的加载动画,真的是花里胡哨!!! 1. AVLoadingIndicatorView-master AVLoadingIndicatorView各种加载效果,适合做加载loading ...

  10. android 蒙层动画,Android酷炫加载进度动画

    一.概述 本自定义动画进度酷炫View,是加载进度动画的自定义View,继承于ImageView来实现,主要实现蒙层加载进度的加载进度效果. 支持水平左右加载和垂直上下加载四个方向,同时也支持自定义蒙 ...

最新文章

  1. “重置”不是“清空”
  2. Winform程序只允许应用单开
  3. 解密时刻:机器学习能力太强好吗?
  4. 如何显示已上演的更改?
  5. 台式电脑没鼠标怎么移动光标_零基础学电脑从入门到精通 电脑零距离
  6. java list 转 map_Java8 快速实现List转map 、分组、过滤等操作
  7. python chrome headless_[技巧] chrome headless 爬虫抓取websoket 数据
  8. matlab find
  9. Android开发笔记(七十九)资源与权限校验
  10. c语言malloc返回值,malloc(0)的返回值
  11. php 置多条cookie,php 在cookie存储多个的简单示例
  12. Cesium基础使用介绍
  13. 基于vue的网页标尺辅助线工具(vue-ruler-tool)
  14. 如何通过Spring的ApplicationListener事件注册服务
  15. ElasticSearch常用搜索关键字整理
  16. SecureCRT串口调试工具配置
  17. Vue路由管理(菜单列表)
  18. Qt QStringLiteral
  19. 【Cocos Creator实战教程(3)】——TiledMap(瓦片地图)组件
  20. margin属性的正负值确定

热门文章

  1. 190403 联众验证码 - python3接入
  2. 无盘工作站建立全攻略
  3. 雷神开机logo更改_笔记本电脑开机LOGO太丑?大神教你来更换
  4. FFmpeg实现音视频同步的精准片段拼接
  5. java restlet 教程_java – Restlet Protocol.FILE用法
  6. 西门子PLC S7-200 SMART简介
  7. 大学学生信息管理系统
  8. 增霸卡传输掉线/无法登录/再次登录时间长
  9. 啦啦外卖商家端APP打包
  10. 食堂饭卡管理系统C语言——课程设计实习