glide是一个图片加载框架,使得我们可以轻松的加载和展示图片
glide4.x新增apply()来进行设置,apply可以调用多次,但是如果两次apply
存在冲突的设置,会以最后一次为准
新增requestoptions对象,用来存放设置
implementation 'com.github.bumptech.glide:glide:4.4.0' //添加支持 annotationprocessor 'com.github.bumptech.glide:compiler:4.4.0' //glide4.x以上需要添加的支持 //如果需要加载网络图片,需要网络权限 <uses-permission android:name="android.permission.internet" />
glide.with(this).load(url).into(imageview);
with() 是初始化glide的实例
load() 是加载url地址的图片
into() 是指定显示的控件
glide.with(this).load("https://www.baid.com/a.jpg").into(imageview);//加载网络图片 glide.with(this).load(uri).into(imageview);//加载url图片 glide.with(this).load(r.mipmap.ic_launcher).into(imageview); //加载resources图片 glide.with(this).load(context.getresources().getassets().open("a.png")).into(imageview); //加载assets图片 glide.with(this).load(file).into(imageview);//加载file图片 glide.with(this).load(byte[]).into(imageview); //加载二进制流图片
gilde默认支持gif图片,但也可以选择指定加载gif动态图片或是静态图片
//asbitmap 指定加载静态图片,如果加载gif图片将会显示第一帧 glide.with(this).asbitmap().load(imageurl).into(imageview); //asgif 指定加载动态图片,如果加载静态图片将会显示加载失败或者显示异常时设定的占位图片 glide.with(this).asgif().load(imageurl).into(imageview); //glide4.x以上新增.asfile()和.asdrawable(),强制使用文件格式和drawable格式的加载,与3.x不同,4.x需要先设置加载格式,再load,不然会报错! //不允许加载网络视频,但是可以加载本地视频 glide.with(context).load(uri.fromfile(new file( filepath))).into(imageview);
glide不会直接将图片的完整尺寸全部加载到内存中,而是用多少加载多少,所以glide会自动根据imageview的大小来决定图片的大小,但是也可以指定加载图片的大小(view的宽高设定为wrap_content才可以指定尺寸):
requestoptions options = new requestoptions(); options1.override(100, 100); //设置加载的图片大小 glide.with(this) .load(url) .apply(options) .into(imageview);
占位图是在加载未完成或者加载失败,为避免空白而设置的图片
requestoptions options = new requestoptions(); options.placeholder(r.drawable.ic_launcher_background); //设置加载未完成时的占位图 options.error(r.mipmap.load_error); //设置加载异常时的占位图
glide.with(this) .load(url) .apply(options) .into(imageview);
glide.with(this).load(url) .listener(new requestlistener<drawable>() { @override public boolean onloadfailed(@nullable glideexception e, object model, target<drawable> target, boolean isfirstresource) { //图片加载失败调用 return false; } @override public boolean onresourceready(drawable resource, object model, target<drawable> target, datasource datasource, boolean isfirstresource) { //图片加载完成时调用 return false; } }) .into(iv);
simpletarget<drawable> simpletarget = new simpletarget<drawable>() { @override public void onresourceready(drawable resource, transition<? super drawable> transition) { //这里可以做复杂的图片变换处理,如下只是简单的显示在imageview上 imageview.setimagedrawable(resource); } }; public void loadimage(view view) { glide.with(this) .load(url) .into(simpletarget); }
提前对图片进行一个预加载,等真正需要加载图片的时候就直接从缓存中读取
glide.with(this) .load("http://www.baidu.com/a.png") .preload(); //预加载图片 glide.with(this) .load("http://www.baidu.com/a.png") .into(imageview); //当需要加载此url时,会先从缓存里读取图片
glide有两种缓存机制,一个是内存缓存,一个是硬盘缓存。内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,而硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据
默认情况下,glide自动就是开启内存缓存的,这样无疑就可以大幅度提升图片的加载效率
默认是开启,除非特殊情况可以关闭
requestoptions options = new requestoptions() .skipmemorycache(true); //禁用内存缓存 glide.with(this) .load(url) .apply(options) .into(imageview);
requestoptions options = new requestoptions() .diskcachestrategy(diskcachestrategy.none); //禁用硬盘缓存 glide.with(this) .load(url) .apply(options) .into(imageview);
glideapp.with(this) .load(url) .onlyretrievefromcache(true) .into(imageview);
glide.get(this).clearmemory(); //清理内存缓存 new thread(new runnable() { @override public void run() { glide.get(mainactivity.this).cleardiskcache(); //清理磁盘缓存 } }).start();
是为glide做图片变换的一个库
compile 'jp.wasabeef:glide-transformations:3.0.1'
模糊处理 .apply(bitmaptransform(new blurtransformation(80))) //模糊度 圆角图片 .apply(bitmaptransform(new roundedcornerstransformation(50, 0, roundedcornerstransformation.cornertype.all))) //第一个参数越大圆角越大
圆形图片 .apply(bitmaptransform(new cropcircletransformation()))
正方形图片 .apply(bitmaptransform(new cropsquaretransformation()))
颜色叠加 .apply(bitmaptransform(new colorfiltertransformation(0x7900cccc)))
黑白图片 .apply(bitmaptransform(new grayscaletransformation()))
自定义裁剪 .apply(bitmaptransform(new croptransformation( 600, 200, croptransformation.croptype.center)))
更多效果,可以看源码:
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
对比 .apply(bitmaptransform(new contrastfiltertransformation(3f))) 失真 .apply(bitmaptransform(new invertfiltertransformation())) 亮度 .apply(bitmaptransform(new brightnessfiltertransformation( 0.5f))) 陈旧 .apply(bitmaptransform(new sepiafiltertransformation( 1.0f))) 马赛克 .apply(bitmaptransform(new pixelationfiltertransformation(20f))) 素描画 .apply(bitmaptransform(new sketchfiltertransformation())) 扭曲 .apply(bitmaptransform(new swirlfiltertransformation(1.0f, 0.4f, new pointf(0.5f, 0.5f)))) //radius 旋转半径[0.0f,1.0f] 单参构造器 - 默认0.5f // angle 角度[0.0f,无穷大单参构造器 - 默认1.0f视图表现为旋转圈数 // center 旋转中心点 单参构造器 - 默认new pointf(0.5f,0.5f) 装饰 .apply(bitmaptransform(new vignettefiltertransformation(new pointf(0.5f, 0.5f), new float[]{0.0f, 0.0f, 0.0f}, 0.0f, 0.5f))) // center 装饰中心 单参构造器 - 默认new pointf(0.5f, 0.5f) // color 颜色组合 单参构造器 - 默认new float[0.0f,0.0f,0.0f] 3个颜色值分别对应rgb3种颜色,取值范围都为[0.0f,1.0f] // start 起始点 单参构造器 - 默认0.0f // end 终止点 单参构造器 - 默认0.75f
multitransformation对象可以存放多种效果
multitransformation multi = new multitransformation( new blurtransformation(25), new roundedcornerstransformation(128, 0, roundedcornerstransformation.cornertype.all)); //模糊加圆角效果的对象 glide.with(this) .load(url) .apply(bitmaptransform(multi)) .into(imageview);
-keep public class * implements com.bumptech.glide.module.glidemodule -keep public class * extends com.bumptech.glide.module.appglidemodule -keep public enum com.bumptech.glide.load.resource.bitmap.imageheaderparser$** { **[] $values; public *; } # for dexguard only -keepresourcexmlelements manifest/application/meta-data@value=glidemodule
如对本文有疑问, 点击进行留言回复!!
荐 面试官:kafka日志段如何读写都不知道,好意思说精通Kafka吗?
荐 如何写出一份“有理有据使人信服”的Android项目设计文档
荐 灵魂一问,Android中有代替HashMap的方法吗?
intent.setFlag的参数 FLAG_ACTIVITY_CLEAR_TASK 说明
网友评论