Glide开源库
来源:互联网 发布:java就业培训教程下载 编辑:程序博客网 时间:2024/05/14 08:42
github托管:https://github.com/bumptech/glide
官方文档:https://github.com/bumptech/glide/wiki
引用项目
compile 'com.github.bumptech.glide:glide:3.7.0'
基本用法
1、加载图片
加载网络地址url值为"http://img15.3lian.com/2015/f2/50/d/71.jpg"的图片,
Glide.with(this) .load(url) .into(image);加载应用中的资源图片,
Glide.with(this) .load(R.drawable.big_imag) .into(image);当然,可加载的资源类型不仅仅这两个,Glide的load方法提供了多种类型,根据实际情况使用,具体如下图,
2、加载过程显示和错误显示图片
由于网络、图片资源大小等原因,可能导致加载时间较长,为了提高用户体验,可以在等待过程中显示一个默认图片,Glide提供了placeholde方法实现该功能,
Glide.with(this) .load(url) .placeholder(R.drawable.default_pic) .into(image);当然,也有可能加载失败,可以显示加载失败后的图片,Glide提供了error方法实现该功能,
Glide.with(this) .load(url) .error(R.drawable.error_pic) .into(image);
3、缓存策略
DiskCacheStrategy.NONE
什么都不缓存 DiskCacheStrategy.SOURCE
仅仅只缓存原来的全分辨率的图像 DiskCacheStrategy.RESULT
仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的) DiskCacheStrategy.ALL
缓存所有版本的图像 Glide提供了四种缓存策略,NONE就不说了,SOURCE仅缓存原图片,第一次加载会下载然后缓存,下次用到该资源的时候直接读取缓存文件;RESULT缓存最终使用的图像,也就是说可能缓存多次,比如有两个Image控件,一个100*100,另一个200*200,虽然获取的是同一个网络资源,但缓存时会根据各自的大小进行缓存,即下载两次,缓存两次,那么如何避免多次下载呢?ALL策略可以解决这个问题,该策略在第一次加载时会将原图片缓存,大小不同的控件加载时先从缓存中读取原文件,然后根据自身大小进行缓存,下次使用时就不用先读取原文件了,其实就是空间换时间。
Glide默认使用RESULT,可以根据自身需求设置缓存策略。
Glide.with(this) .load(url) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(image);
4、图片缩放
centerCrop,填充ImageView设置的大小,图片可能被拉伸填充。
Glide.with(this) .load(url) .centerCrop() .into(image);
fitCenter,缩放图像让图等于或小于ImageView的边界范围,图像将会完全显示,但可能不会填满整个ImageView。
Glide.with(this) .load(url) .fitCenter() .into(image);
5、显示gif和视频
除了可以显示静态的图片外,还可以显示gif、本地视频,
Glide.with(this) .load(R.drawable.mygif) .asGif() .placeholder(R.drawable.default_pic) .into(image);
String path = "sdcard/congo.mp4";Glide.with(this) .load(Uri.fromFile(new File(path))) .placeholder(R.drawable.default_pic) .into(image);
6、清除缓存
clearDiskCache--清除硬盘缓存
clearMemory--清除内存缓存需要注意的是,clearDiskCache不能再UI线程中执行。
全局配置
1、实现GlideModel接口自定义全局配置
public class GlideConfiguration implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { } @Override public void registerComponents(Context context, Glide glide) { }}
混淆配置
-keepnames class com.demo.glidedemo.GlideConfiguration# or more generally:#-keep public class * implements com.bumptech.glide.module.GlideModule# for DexGuard only-keepresourcexmlelements manifest/application/meta-data@value=GlideModule注册
<meta-data android:name="com.demo.glidedemo.GlideConfiguration" android:value="GlideModule" />
2、图片格式
Glide的默认Bitmap格式为RGB_565,占用内存为小一些,但是会损失图片质量,如果对这种格式的显示效果不满意,可以配置成ARGB_8888,
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);3、硬盘缓存
Glide中用setDiskCache方法设置硬盘缓存的路径和大小,默认使用InternalCacheDiskCacheFactory类来创建硬盘缓存,缓存文件放在应用自身缓存目录下,其他应用无法读取,默认缓存最大值为250M。当然也可以自己定义内部缓存目录和缓存大小,如,
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, "glide", cacheSize));
ExternalCacheDiskCacheFactory可用来创建应用外部缓存目录和大小,
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "glide", cacheSize));使用上面两个类配置硬盘缓存,基本路径是固定的,如果想要完全自己定以缓存目录,可以使用DiskLruCacheFactory来构建,有多个构造方法,
builder.setDiskCache(new DiskLruCacheFactory(cacheDir, cacheSize));builder.setDiskCache(new DiskLruCacheFactory(cacheDir, "glide", cacheSize));builder.setDiskCache(new DiskLruCacheFactory(new DiskLruCacheFactory.CacheDirectoryGetter() { @Override public File getCacheDirectory() { return new File(cacheDir); }}, cacheSize));如果想完全控制缓存的构建,可以实现DiskCache.Factory接口,
builder.setDiskCache(new DiskCache.Factory() { @Override public DiskCache build() { File cacheLocation = new File(cacheDir); cacheLocation.mkdirs(); return DiskLruCacheWrapper.get(cacheLocation, cacheSize); }});
4、内存缓存
GlideBuilder当中,允许开发者去设置内存当中图片缓存区的大小,通过实现Glide的MemoryCache和BitmapPool。
默认大小由
MemorySizeCalculator类来计算出合适的缓存大小,
MemorySizeCalculator calculator = new MemorySizeCalculator(context);int defaultMemoryCacheSize = calculator.getMemoryCacheSize();int defaultBitmapPoolSize = calculator.getBitmapPoolSize();如果在应用当中想要调整内存缓存的大小,开发者可以通过如下方式:
Glide.get(context).setMemoryCategory(MemoryCategory.HIGH);Glide内存缓存的目的是减少I/O,提高效率 ,可以通过GlideBuidler的
setMemoryCache(MemoryCache memoryCache)
去设置缓存的大小,开发者可以通过LruResourceCache去设置缓存区的大小,new GlideBuilder(context).setMemoryCache(new LruResourceCache(yourSizeInBytes));
可以通过GlideBuilder的setBitmapPool()方法设置池子的大小,LruBitmapPool是Glide的默认实现,使用如下:
new GlideBuilder(context).setBitmapPool(new LruBitmapPool(sizeInBytes));一般内存缓存用默认的就可以,尽量不要自己去定义。
自定义Target
1、SimpleTarget
如果简单地加载一个Bitmap,可以通过以下简单的方式而不是直接地显示给用户,可能是显示一个notification,或者上传一个头像,Glide都能很好地实现。
SimpleTarget提供了对Target的简单实现,并且让你专注于对加载结果的处理 。使用SimpleTarget,开发者需要提供一个宽和高的像素值,用来加载你的资源文件,并且你需要去实现。
SimpleTarget提供了对Target的简单实现,并且让你专注于对加载结果的处理 。使用SimpleTarget,开发者需要提供一个宽和高的像素值,用来加载你的资源文件,并且你需要去实现。
private void showSimpleTarget() { SimpleTarget simpleTarget = new SimpleTarget<Bitmap>(250, 250) { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { image.setImageBitmap(resource); } }; Glide.with(this) .load(url) .asBitmap() .into(simpleTarget);}
2、ViewTarget
我们不能直接使用ImageView的原因可能是多种多样的,刚才展示如何去接收一个 Bitmap,现在我们要更进一步。假设你有一个自定义View,Glide并不支持加载图片到自定义view中,Glide可以用ViewTarget来实现,
private void showViewTarget() { ViewTarget<MyView, GlideDrawable> viewTarget = new ViewTarget<MyView, GlideDrawable>(myview) { @Override public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) { this.view.setImage(resource.getCurrent()); } }; Glide.with(this) .load(url) .into(viewTarget);}
集成网络栈
Volley
1、添加依赖
// Glide's Volley Integrationcompile 'com.github.bumptech.glide:volley-integration:1.3.1@aar'compile 'com.mcxiaoke.volley:library:1.0.8'2、混淆
-keep class com.bumptech.glide.integration.volley.VolleyGlideModule#or-keep public class * implements com.bumptech.glide.module.GlideModule
OkHttp3
1、添加依赖
// Glide's OkHttp Integrationcompile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'compile 'com.squareup.okhttp3:okhttp:3.4.1'2、混淆
-keep class com.bumptech.glide.integration.okhttp3.OkHttpGlideModule
网上一个比较详细的系列文章, 写的不错,
原文:https://futurestud.io/blog/glide-getting-started
翻译:http://mrfu.me/2016/02/27/Glide_Getting_Started/
Demo下载
2 0
- Glide开源库
- glide
- Glide
- Glide
- glide
- Glide
- Glide
- Glide
- Glide
- glide
- Glide
- Glide
- Glide
- Glide
- Glide
- Glide
- Glide
- Glide
- Python3爬虫学习笔记0.0——综述
- 给centOS安装epel源
- VI
- 使用IDA远程调试Android文件
- ionic build android 错误
- Glide开源库
- 对敏捷管理模式核心价值的解读
- and/or(&&||)的理解
- JDK安装以及检测
- HDU 5780 gcd
- spring里面使用quartz实现定时任务
- poj2728 Desert King 【最优比例生成树 01分数规划】
- 取消urllib3警告
- 使用 Spring 进行单元测试