Glide是一个图片加载框架,使得咱们能够轻松的加载和展现图片android
Glide4.x新增apply()来进行设置,apply能够调用屡次,可是若是两次apply
存在冲突的设置,会以最后一次为准git
新增RequestOptions对象,用来存放设置github
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() 是指定显示的控件app
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才能够指定尺寸):ide
RequestOptions options = new RequestOptions(); options1.override(100, 100); //设置加载的图片大小 Glide.with(this) .load(url) .apply(options) .into(imageView);
占位图是在加载未完成或者加载失败,为避免空白而设置的图片ui
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); }
提早对图片进行一个预加载,等真正须要加载图片的时候就直接从缓存中读取this
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