Glide的使用

xiaoxiao2021-02-28  116

前言

最近有几个项目在使用Glide来加载图片,郭神最近也在写Glide的相关博客,所以准备花时间研究下Glide,作为总结和笔记 郭神Glide的简单使用传送门:http://blog.csdn.net/guolin_blog/article/details/53759439

现状

Android的图片加载框架有很多,从UniversalImageLoader,到后来Google推出的Volley,再到后来的新兴军Glide和Picasso,当然还有Facebook的Fresco。每个框架都有自己的优势和不足,没有最好的,只有合适的,所以需要根据不同的项目来自行选取。

特点

功能强大:能配置占位图、异常占位图、 使用了3级缓存、支持加载gif图片等。 调用简单:一般只需要一行代码就可以完成图片的加载。

使用

1)将库导入到项目,在app/build.gradle文件中增加如下依赖

dependencies { compile 'com.github.bumptech.glide:glide:3.7.0'//该地址不是github上的地址,而是jcenter仓库上的地址 }

2)在AndroidManifest.xml中声明网络权限

<uses-permissionandroid:name="android.permission.INTERNET" />

3)简单地加载图片

public void simpleLoadImage(Context context, String imageUrl, ImageView imageView) { Glide.with(context).load(imageUrl).into(imageView); }

上述流程就是一个最基本的加载网络图片的流程。是不是很简单啊,下面看看Glide的其他用法。

4)占位图,当需要在加载成功之前显示默认图片时,就需要设置占位图了,代码如下,其实就是在load方法和into方法之前增加了placeholder方法,Glide的其他功能也是类似的调用流程。

public void loadWithPlaceHolder(Context context, String imageUrl, Drawable phDrawable, ImageView imageView) { Glide.with(context) .load(imageUrl) .placeholder(phDrawable) .into(imageView); }

5)异常占位符,Glide可以设置一张图片,用于加载图片失败时显示。

public void loadWithError(Context context, String imageUrl, int phId, int errorId, ImageView imageView) { Glide.with(context) .load(imageUrl) .placeholder(phId) .error(errorId) .into(imageView); }

6)禁用文件缓存,Glide默认是为我们提供了三级缓存功能,当我们不需要时(加载Gif图片时就需要禁止,否则Glide会对Gif图对每一帧都进行缓存,这样就会导致第一次加载的时间特别长),可以通过如下代码设置Glide不进行文件缓存。

public void loadWithNoDiskCache(Context context, String imageUrl, int phId, ImageView imageView) { Glide.with(context) .load(imageUrl) .placeholder(phId) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(imageView); }

7)加载Gif图,Glide默认是支持Gif图的,不需要任何额外配置,要注意的是,需要禁止文件缓存,否则第一次会很慢。 但是如果我们不希望加载Gif图,而只允许加载静态图片,就可以调用asBitmap方法,这时候,就去取Gif图的第一帧用于展示。

private void loadAsBitmap(Context context, String imageUrl, int phId, int errorId, ImageView imageView) { Glide.with(context) .load(imageUrl) .asBitmap() .placeholder(phId) .error(errorId) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(imageView); }

与之对应,如果我们只想加载Gif图,可以调用asGif方法,这时候,如果加载的是静态图,就会加载失败。

private void loadAsGif(Context context, String imageUrl, int phId, int errorId, ImageView imageView) { Glide.with(context) .load(imageUrl) .asGif() .placeholder(phId) .error(errorId) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(imageView); }

8)指定大小,一般来说使用Glide加载图片,不要指定图片大小,Glide会根据ImageView的大小去决定图片的大小。不过Glide也提供了override方法用于指定加载图片的大小。

private void loadWithWH(Context context, String imageUrl, int width, int height, ImageView imageView) { Glide.with(context) .load(imageUrl) .diskCacheStrategy(DiskCacheStrategy.NONE) .override(width, height) .into(imageView); }

9)清理缓存,使用Glide加载图片时,Glide会帮我们进行内存缓存和文件缓存,其中文件缓存使用的DiskLruCache,Glide为此也提供了清理缓存的方法,我们可以使用clearMemory来清理内存缓存(主线程),使用clearDiskCache来清理文件缓存(子线程)。

private void clearCache(final Activity activity) { if (Thread.currentThread() == Looper.getMainLooper().getThread()) { //主线程 //清理内存,需要在主线程 Glide.get(activity).clearMemory(); new Thread(new Runnable() { @Override public void run() { //清理文件缓存,需要在子线程 Glide.get(activity).clearDiskCache(); } }).start(); } else { //子线程 activity.runOnUiThread(new Runnable() { @Override public void run() { Glide.get(activity).clearMemory(); } }); Glide.get(activity).clearDiskCache(); } }

后续会继续更新该博客Glide的使用

知其然,也要知其所以然,Glide的源码分析传送门:http://blog.csdn.net/luofen521/article/details/71213440

转载请注明原文地址: https://www.6miu.com/read-26468.html

最新回复(0)