天天看點

Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

文章目錄

  • ​​前言​​
  • ​​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 目錄 ,如下:

Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

使用 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 會把資源存在自己的預設目錄,如下:

Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

當然我們也可以自己儲存位元組數組到自定義目錄。

這種方式,儲存的是原圖,比較浪費資源。

如果我們知道 imageView 的寬高,就可以針對性的儲存資源,看看 SimpleTarget 的構造函數。

Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

下面我們指定寬高看看

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)      
Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

圓形 CropCircleTransformation

Glide.with(this)
      .load(url)
      .bitmapTransform(CropCircleTransformation(Glide.get(this).bitmapPool))
      .into(image)      
Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

圖檔變灰 GrayscaleTransformation

這種情況,适合哀悼日使用。

Glide.with(this)
     .load(url)
     .bitmapTransform(GrayscaleTransformation(Glide.get(this).bitmapPool))
     .into(image)      
Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

區域裁切 CropTransformation

在原圖的中間區域,裁切寬高為 200x200 的區域顯示在 image 中。

  • TOP 從頂部裁切
  • CENTER 從中間裁切
  • BOTTOM 從底部裁切
Glide.with(this)
     .load(url)
     .bitmapTransform(
                    CropTransformation(
                        Glide.get(this).bitmapPool,
                        200,
                        200,
                        CropTransformation.CropType.CENTER
                    )
                )
     .into(image)      
Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

正方形 CropSquareTransformation

強制把長方形的 imageView 顯示為一個正方形

Glide.with(this)
      .load(url)
      .bitmapTransform(CropSquareTransformation(Glide.get(this).bitmapPool) )
      .into(image)      
Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

高斯模糊 BlurTransformation

Glide.with(this)
     .load(url)
     .bitmapTransform(BlurTransformation(this))
     .into(image)      
Android Glide 3.8 常見方法總結 【圓角、下載下傳、回調】

形狀變化 MaskTransformation

首先準備一個星星圖檔,​

​star.png​

Glide.with(this)
        .load(url)
        .bitmapTransform( MaskTransformation(this, R.drawable.star) )
        .into(image)