文章目錄
- 前言
- preload
- 預加載 帶回調
- 變換
- 圓角 RoundedCornersTransformation
- 圓形 CropCircleTransformation
- 圖檔變灰 GrayscaleTransformation
- 區域裁切 CropTransformation
- 正方形 CropSquareTransformation
- 高斯模糊 BlurTransformation
- 形狀變化 MaskTransformation
前言
前言:發現公司的一個項目,glide 用的還是 3.8 版本。總結一下,常見的方法,加速開發,拒絕加班。
preload
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.preload(200, 200)
經過 preload 下載下傳的圖檔,儲存在 cache 目錄 ,如下:
使用 preload 的圖檔
Glide.with(this)
.load(url)
.asBitmap()
.into(object : SimpleTarget<Bitmap>(200,200){
override fun onResourceReady(
resource: Bitmap?,
glideAnimation: GlideAnimation<in Bitmap>?
) {
image.setImageBitmap(resource)
}
})
需要注意的是,preload 要指定
.diskCacheStrategy(DiskCacheStrategy.RESULT)
, 并且要指定大小
在使用的時候,SimpleTarget 也要指定大小,否則即使下載下傳好了圖檔,也不能使用。
也可以不知道,寬高。
預加載的 磁盤政策 和 使用的政策 一定要一緻
, 如下:
//預加載
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.preload()
//使用
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(image2)
預加載 帶回調
private fun download(url: String) {
Glide.with(this)
.load(url)
.asBitmap()
.toBytes()
.into(object : SimpleTarget<ByteArray>() {
override fun onResourceReady(data: ByteArray?, p1: GlideAnimation<in ByteArray>) {
}
override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) {
super.onLoadFailed(e, errorDrawable)
}
})
}
下載下傳完成,onResourceReady 會回調。glide 會把資源存在自己的預設目錄,如下:
當然我們也可以自己儲存位元組數組到自定義目錄。
這種方式,儲存的是原圖,比較浪費資源。
如果我們知道 imageView 的寬高,就可以針對性的儲存資源,看看 SimpleTarget 的構造函數。
下面我們指定寬高看看
private fun download(url: String) {
Glide.with(this)
.load(url)
.asBitmap()
.toBytes()
.into(object : SimpleTarget<ByteArray>(100,100) {
override fun onResourceReady(data: ByteArray?, p1: GlideAnimation<in ByteArray>) {
}
override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) {
super.onLoadFailed(e, errorDrawable)
}
})
}
通過指定寬高,緩存在磁盤中的檔案比原圖小的,節省了磁盤資源。
在上面的示例中,SimpleTarget 傳回是 ByteArray ,當然我們也可以傳回 Bitmap
private fun download(url: String) {
Glide.with(this)
.load(url)
.asBitmap()
.into(object : SimpleTarget<Bitmap>() {
override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) {
super.onLoadFailed(e, errorDrawable)
}
override fun onResourceReady(
resource: Bitmap?,
glideAnimation: GlideAnimation<in Bitmap>?
) {
}
})
}
變換
圓角 RoundedCornersTransformation
implementation 'jp.wasabeef:glide-transformations:2.0.2'
Glide.with(this)
.load(url)
.bitmapTransform(RoundedCornersTransformation(Glide.get(this).bitmapPool, 50, 0))
.into(image)
圓形 CropCircleTransformation
Glide.with(this)
.load(url)
.bitmapTransform(CropCircleTransformation(Glide.get(this).bitmapPool))
.into(image)
圖檔變灰 GrayscaleTransformation
這種情況,适合哀悼日使用。
Glide.with(this)
.load(url)
.bitmapTransform(GrayscaleTransformation(Glide.get(this).bitmapPool))
.into(image)
區域裁切 CropTransformation
在原圖的中間區域,裁切寬高為 200x200 的區域顯示在 image 中。
- TOP 從頂部裁切
- CENTER 從中間裁切
- BOTTOM 從底部裁切
Glide.with(this)
.load(url)
.bitmapTransform(
CropTransformation(
Glide.get(this).bitmapPool,
200,
200,
CropTransformation.CropType.CENTER
)
)
.into(image)
正方形 CropSquareTransformation
強制把長方形的 imageView 顯示為一個正方形
Glide.with(this)
.load(url)
.bitmapTransform(CropSquareTransformation(Glide.get(this).bitmapPool) )
.into(image)
高斯模糊 BlurTransformation
Glide.with(this)
.load(url)
.bitmapTransform(BlurTransformation(this))
.into(image)
形狀變化 MaskTransformation
首先準備一個星星圖檔,
star.png
Glide.with(this)
.load(url)
.bitmapTransform( MaskTransformation(this, R.drawable.star) )
.into(image)