一、Glide获取Bitmap
使用Glide获取Bitmap是非常容易的,只需要通过Glide.with().asBitmap()方法加载图片即可:
Glide.with(context)
.load(url)
.asBitmap()
.into(new SimpleTarget
() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
//bitmap已经加载完成,可以对其进行操作
}
});
通过这种方式,Glide会自动帮我们将网络图片或本地图片转换成Bitmap,并且会缓存该Bitmap以供下次快速加载。
二、Glide获取图片
除了获取Bitmap之外,我们还可以通过Glide获取图片,方法与获取Bitmap类似,只需要将asBitmap()方法换成asDrawable()即可:
Glide.with(context)
.load(url)
.asDrawable()
.into(new SimpleTarget
() {
@Override
public void onResourceReady(Drawable resource, GlideAnimation glideAnimation) {
//图片已经加载完成,可以对其进行操作
}
});
三、Glide获取视频第一帧
同样地,我们可以使用Glide获取视频的第一帧图像:
Glide.with(context)
.load(url)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(new SimpleTarget
() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
//视频第一帧图像已经加载完成,可以对其进行操作
}
});
需要注意的是,在使用Glide获取视频第一帧时,最好将diskCacheStrategy()设置为ALL,这样才能使Glide顺利地获取视频缩略图。
四、Glide获取缩略图有点慢
如果我们只需要一张图片的缩略图,那么使用上述的方法可能会有点慢,因为Glide会将整张图片加载完后再生成缩略图。此时,我们可以使用thumbnail()方法来快速获取缩略图:
Glide.with(context)
.load(url)
.thumbnail(0.1f)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
//缩略图已经加载完成,可以对其进行操作
}
});
在上述代码中,thumbnail()方法的参数0.1f表示缩略图大小为原图的1/10。
五、Glide获取图片宽高
有时候,我们需要获取图片的宽高信息,以便后续的操作。这可以通过BitmapFactory.Options对象来实现:
Glide.with(context)
.load(url)
.asBitmap()
.into(new SimpleTarget
() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
int width = resource.getWidth();
int height = resource.getHeight();
//获取图片的宽高信息
}
});
六、Glide获取一级缓存
除了网络或本地图片外,Glide还会缓存在内存中。Glide缓存在内存中的图片称为一级缓存。可以使用MemoryCacheKey类来获取:
Glide.with(context)
.load(url)
.asBitmap()
.into(new SimpleTarget
() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
MemoryCacheKey key = new MemoryCacheKey(new GlideUrl(url), EmptySignature.obtain());
Bitmap bitmap = memoryCache.get(key);
}
});
其中,memoryCache为Glide内部的一级缓存对象。如果你需要获取一级缓存之外的缓存,可以使用DiskLruCache。
七、Glide获取不到文件缩略图
当我们使用Glide获取本地图片的缩略图时,可能会出现获取不到缩略图的情况。解决方法是在placeholder()方法中设置一个空白图像,这样Glide会强制生成缩略图:
Glide.with(context)
.load(new File(file))
.placeholder(R.color.transparent)
.thumbnail(0.1f)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
//缩略图已经加载完成,可以对其进行操作
}
});
八、Glide获取Drawable
有时候,我们只需要获取Drawable而不是Bitmap或图片。这可以通过asDrawable()方法来实现:
Glide.with(context)
.load(url)
.asDrawable()
.into(new SimpleTarget
() {
@Override
public void onResourceReady(Drawable resource, GlideAnimation glideAnimation) {
//获取到Drawable对象,可以对其进行操作
}
});
九、Glide获取视频第一帧子线程
默认情况下,Glide会在主线程中执行,如果我们需要在子线程中获取视频第一帧图像,可以使用into()方法的另一个重载,指定Handler即可:
Glide.with(context)
.load(url)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(new SimpleTarget
() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
//视频第一帧图像已经加载完成,可以对其进行操作
}
}, new Handler(Looper.getMainLooper()));
总结
通过本文的介绍,相信大家已经对Glide获取Bitmap有了更深入的认识。Glide作为一款强大而易用的图片加载库,在Android开发中有着广泛的应用。