Glide 4 基础使用
程序员文章站
2022-03-12 17:10:34
...
这个是中文Glide v4 中文版介绍:点击打开链接
1,最基础使用
Glide.with(this).load("http://guolin.tech/book.png").into(iv);
2,占位图
RequestOptions options = new RequestOptions()
.placeholder(R.mipmap.ic_launcher);
Glide.with(this).load("http://guolin.tech/book.png")
.apply(options).into(iv);
当网络为加载好的时候出现的图片
3,指定图片尺寸
RequestOptions options = new RequestOptions()
.override(120,30);
Glide.with(this).load("http://guolin.tech/book.png")
.apply(options).into(iv);
override 第一个参数 乘以 第二个参数 是代表尺寸 这个不建议用 因为设置太大会内存溢出
4,缓存机制
RequestOptions options = new RequestOptions()
.placeholder(R.mipmap.ic_launcher)
//异常占位图(当加载异常的时候出现的图片)
.error(R.mipmap.ic_launcher)
//禁止Glide硬盘缓存缓存
.diskCacheStrategy(DiskCacheStrategy.NONE);
Glide.with(this).load("http://guolin.tech/book.png")
.apply(options).into(iv);
//Glide分成内存缓存和硬盘缓存
//内存缓存:内存缓存的主要作用是防止应用重复将图片数据读取到内存当中
//硬盘缓存:硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据
//内存缓存
//你要知道,默认情况下,Glide自动就是开启内存缓存的。
// 也就是说,当我们使用Glide加载了一张图片之后,这张图片就会被缓存到内存当中,
// 只要在它还没从内存中被清除之前,下次使用Glide再加载这张图片都会直接从内存当中读取,
// 而不用重新从网络或硬盘上读取了,这样无疑就可以大幅度提升图片的加载效率。
// 比方说你在一个RecyclerView当中反复上下滑动,
// RecyclerView中只要是Glide加载过的图片都可以直接从内存当中迅速读取并展示出来,
// 从而大大提升了用户体验。
//内存缓存是Glide默认开启的
//如果出于某些特殊愿意你要禁用内存缓存的话
// RequestOptions options = new RequestOptions()
// .skipMemoryCache(true);
//那里设置true就是禁用内存缓存
//硬盘缓存
//禁止硬盘缓存在4的刚开始就有了
//diskCacheStrategy() 五种参数
//DiskCacheStrategy.NONE: 表示不缓存任何内容。
//DiskCacheStrategy.DATA: 表示只缓存原始图片。
//DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
//DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
//DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
5,指定加载格式
// 自动判断图片格式
Glide.with(this).load("http://guolin.tech/test.gif").into(iv);
// 指定图片格式
Glide.with(this)
//这个方法的意思就是说这里只允许加载静态图片
//如果传入的是Gif格式的话 展示第一帧
//Glide 4 现有 asBitmap asDrawable asFile asGif 四种
.asBitmap()
.load("http://guolin.tech/test.gif").into(iv);
6,回调与监听
//into()方法不一定只能传入ImageView 需要用到SimpleTarget
SimpleTarget<Drawable> simpleTarget = new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
iv.setImageDrawable(resource);
}
};
Glide.with(this).load("http://guolin.tech/book.png").into(simpleTarget);
//这里我们创建了一个SimpleTarget的实例,并且指定它的泛型是Drawable,
// 然后重写了onResourceReady()方法。在onResourceReady()方法中,
// 我们就可以获取到Glide加载出来的图片对象了,也就是方法参数中传过来的Drawable对象。
// 有了这个对象之后你可以使用它进行任意的逻辑操作,这里我只是简单地把它显示到了ImageView上。
//SimpleTarget的实现创建好了,那么只需要在加载图片的时候将它传入到into()方法中就可以了。
7,预加载
//预加载
//之前预加载
Glide.with(this).load("http://guolin.tech/book.png")
.preload();
//要用时直接调用
Glide.with(this).load("http://guolin.tech/book.png")
.into(iv);
8,submit()方法下载图片
new Thread(new Runnable() {
@Override
public void run() {
try {
final Context context = getApplicationContext();
FutureTarget<File> target = Glide.with(context)
.asFile().load("http://guolin.tech/book.png")
.submit();
final File imageFile = target.get();
//在主线程
runOnUiThread(new Runnable() {
@Override
public void run() {
//路径
LogUtil.fussenLog().d(imageFile.getParent());
}
});
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}).start();
9,listener()方法 监听Glide加载图片的状态
Glide.with(this)
.load("http://www.guolin.tech/book.png")
.listener(new RequestListener<Drawable>() {
//返回false就表示这个事件没有被处理,还会继续向下传递,
// 返回true就表示这个事件已经被处理掉了,从而不会再继续向下传递。
// 举个简单点的例子,如果我们在RequestListener的onResourceReady()方法
// 中返回了true,那么就不会再回调Target的onResourceReady()方法了。
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
//图片加载失败的时候就会回调onLoadFailed()方法
//通过GlideException 判断
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
//当图片加载完成的时候就会回调onResourceReady()方法
return false;
}
})
.into(iv);
10,图片变换(变形)
RequestOptions options = new RequestOptions()
//变圆
// .circleCrop();
//变成其他的要另外添加依赖
//compile 'jp.wasabeef:glide-transformations:3.0.1'
//模糊
// .transform(new BlurTransformation());
//黑白
.transform(new GrayscaleTransformation());
Glide.with(this).load("http://www.guolin.tech/book.png")
.apply(options).into(iv);
11,Glide 保存图片到本地
private void downLoadImageNew() {
final Context context = getApplicationContext();
RequestOptions options = new RequestOptions()
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL); //指定图片大小(原图)
Glide.with(context).asBitmap().load("http://www.guolin.tech/book.png").apply(options)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
Bitmap tempBitmip = resource;
//将时间戳转成固定格式
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date(System.currentTimeMillis());
//图片名称
String mFileName = "/bzf/" + format.format(date) + ".jpg";
//图片路径
File tempPath = Environment.getExternalStorageDirectory();
//保存图片
File newFile = saveBitmap(tempPath, mFileName, tempBitmip);
String backgroundPath = newFile.getPath();
if (backgroundPath != null) {
// 其次把文件插入到系统图库
try {
MediaStore.Images.Media.insertImage(context.getContentResolver(),
newFile.getAbsolutePath(), backgroundPath, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 最后通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.fromFile(new File(newFile.getPath()))));
Toast.makeText(context, "图片成功保存至:/storage/emulated/0/bzf", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "保存失败", Toast.LENGTH_SHORT).show();
}
}
});
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OK完成,感觉这些现在暂时够用,下次有新的要用的再更新。