Android Glide4 异步图片框架
- 简介篇: Glide框架
- 迁移篇:Glide V4 框架新特性(Migrating from v3 to v4)
- 基础篇:Android开发中使用Glide V4 中Generated API特性
- 进级篇:Kotlin编程开发之Glide V4使用OkHttp3作为传输层
文章图片
Glide是一个面向Android快速和高效的开源媒体管理(open source media management )和图片加载(image loading )的框架,使用指定的接口很容易在一个案例中实现媒体解码(media decoding),内存(memory)和磁盘缓存(disk caching),资源池(resource pooling)的功能。配置Glide:
Glide支视三种类型的资源:视频,图片,动画GIF,对其进行获取,解码,显示操作。Glide拥有灵活的API,允许开发人员自定义添加网络堆栈(Network stack)。Glide默认使用HttpUrlConnection的网络堆栈,也可以使用Google的Volley库和Squareas的OkHttp库来替代。
Glide的主要重点是平滑和快速的滚动任何类型的图像列表。同时,Glide也高效的适用于这些情况,例如:获取,调整大小,显示远程图像。
- 在Gradle中引入:
compile 'com.github.bumptech.glide:glide:4.0.0-RC0' annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC0'
- 若是使用Glide 以前版本,下载静态的jar包,点击版本下载。
- 在项目中proguard中混淆规则:
-keep public class * implements com.bumptech.glide.module.GlideModule -keep public class * extends com.bumptech.glide.AppGlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; }# for DexGuard only -keepresourcexmlelements manifest/application/meta-data@value=https://www.it610.com/article/GlideModule
注意点:在最新V4版本中,若是AppGlideModule子类中isManifestParsingEnabled()返回false,则不需要AndroidManifest.xml中配置GlideModule。
更多配置规则,请阅读 Configuration wiki 。
【Android|Glide框架】这里列举两个简单Glide V4使用案例。
- 单个ImageView使用Glide加载网络上的百度图片:
public void onCreate(Bundle savedInstanceState) { ... ImageView imageView = (ImageView) findViewById(R.id.my_image_view); Glide.with(this).load("https://www.baidu.com/img/bd_logo1.png").into(imageView); }
- RecyclerView中ImageView使用Glide’s generated API,AppGlideModule的配置未贴出 :
@Override public void onBindViewHolder(ViewHolder holder, int position) { MovieData movieData = https://www.it610.com/article/list.get(position); holder.getTitle().setText(movieData.getTitle()); imageLoader.loadImage(movieData.getImages(),holder.getNetworkImageView()); //加载未获取图片之前的空白图片,发生异常的图片,图片资源 GlideApp.with(context) .load(movieData.getImages()) .placeholder(R.mipmap.ic_launcher) .error(R.mipmap.ic_launcher) .into(holder.getNetworkImageView()); }
更多详情,请阅读GitHub wiki 和 javadocs,以及。
在3.0 分支上的Version 3是一个稳定的公开版本,用于Google的多个开源项目,包括 Android Camera app 和2014年的Google IO app。当前版本4 是在分支中开发。
Compatibility(兼容):
- Android SDK :Glide最低要求API 10
- OkHttp 2.x : 这里是有自行选择可用的依赖 okhttp- integration库 , 请阅读 Integration Libraries 页面.
- OkHttp 3.x : 这里是有自行选择可用的依赖 okhttp3- integration库 , 请阅读 Integration Libraries 页面.
- Volley : 这里是有自行选择可用的依赖 volley- integration库 , 请阅读 Integration Libraries 页面.
- Round Pictures :
CircleImageView/CircularImageView/RoundedImageView已经知道的问题,结合使用TransitionDrawable ( .crossFade() 和 .thumbnail() 或者 .placeholder() )和动画GiF,解决方式:使用在v4库下的BitmapTransformation( .circleCrop() )或者 .dontAnimate().
- Huge Images(maps,comic strips) :
Glide可以通过低级采用(downsampling)来加载大图片,但是不支持缩放和平滑 ImageView ,因为他们需要特殊资源优化(例如 平铺)来工作,才能避免OutOfMemoryErrors。
- Glide 项目: https://github.com/bumptech/glide
- Glide wiki : https://github.com/bumptech/glide/wiki
- 各种官方案例:
- Flickr案例:在Flick的公共API中,用户搜索关键字所匹配的图像,然后下载前几百次命中,并以几种不同的大小显示它们。
- Gallery案例:加载手机本地存储的图像和视屏静止图像,在RecyclerView水平滚动的显示。
- Giphy案例:使用Giphy`s的公开API来下载数据和流行的GIFs动画,且在垂直列表中显示他们。
- SVG案例:通过Resources和网络加载SVG数据,且使用自定义的解码器(custom decoder)和drawble来显示SVG。
- Google I/O案例:2014年Google I/O App使用Glide来实现各种场景下的使用。
- Flickr案例:在Flick的公共API中,用户搜索关键字所匹配的图像,然后下载前几百次命中,并以几种不同的大小显示它们。