Android Coil3 custom transformations CircleCropTransformation cache into memory,Kotlin

Android Coil3 custom transformations CircleCropTransformation cache into memory,Kotlin

import android.graphics.Paint
import android.graphics.PorterDuff
import android.graphics.PorterDuffXfermode
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.graphics.applyCanvas
import androidx.core.graphics.createBitmap
import androidx.lifecycle.lifecycleScope
import coil3.Bitmap
import coil3.imageLoader
import coil3.memory.MemoryCache
import coil3.request.ImageRequest
import coil3.request.target
import coil3.request.transformations
import coil3.size.Size
import coil3.toBitmap
import coil3.transform.CircleCropTransformation
import coil3.transform.Transformation
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.util.UUID

class ImageActivity : AppCompatActivity() {
    companion object {
        const val SIZE = 500
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_image)

        val image1 = findViewById<ImageView>(R.id.image1)
        val image2 = findViewById<ImageView>(R.id.image2)
        val image3 = findViewById<ImageView>(R.id.image3)

        val mImageLoader = application.imageLoader

        val resId = R.mipmap.image

        val imgReq1 = ImageRequest.Builder(this)
            .data(resId)
            .size(SIZE)
            .transformations(CircleCropTransformation())
            .target(image1)
            .build()
        mImageLoader.enqueue(imgReq1)


        val memoryCacheKey = "resId=$resId size=$SIZE"
        val transformationKey = "tag=${MyCircleCropTransformation.TAG} ${UUID.randomUUID()}"

        val imgReq2 = ImageRequest.Builder(this)
            .data(resId)
            .size(SIZE)
            .memoryCacheKey(memoryCacheKey)
            .transformations(MyCircleCropTransformation(transformationKey))
            .target(image2)
            .build()
        mImageLoader.enqueue(imgReq2)

        lifecycleScope.launch(Dispatchers.IO) {
            delay(500)

            val memoryCacheKeyExtras = imgReq2.memoryCacheKeyExtras
            val key = MemoryCache.Key(memoryCacheKey, memoryCacheKeyExtras)
            val imgCache = mImageLoader.memoryCache?.get(key)

            withContext(Dispatchers.Main) {
                image3.setImageBitmap(imgCache?.image?.toBitmap())
            }
        }
    }

    class MyCircleCropTransformation(transformationKey: String) : Transformation() {
        companion object {
            const val TAG = "fly/MyCircleCropTransformation"
        }

        override val cacheKey: String = transformationKey //缓存在内存的key

        override suspend fun transform(input: Bitmap, size: Size): Bitmap {
            val paint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.FILTER_BITMAP_FLAG)

            val minSize = minOf(input.width, input.height)
            val radius = minSize / 2f
            val output = createBitmap(minSize, minSize, android.graphics.Bitmap.Config.ARGB_8888)
            output.applyCanvas {
                drawCircle(radius, radius, radius, paint)
                paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
                drawBitmap(input, radius - input.width / 2f, radius - input.height / 2f, paint)
            }

            return output
        }
    }
}

Android Coil3圆形CircleCropTransformation 、 圆角矩形RoundedCornersTransformation,Kotlin-CSDN博客文章浏览阅读183次,点赞2次,收藏2次。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。 https://blog.csdn.net/zhangphil/article/details/146324745

Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(5)_coil android-CSDN博客文章浏览阅读967次,点赞18次,收藏18次。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。_coil android https://blog.csdn.net/zhangphil/article/details/146079600