Jetpack 组合线圈预载

问题描述 投票:0回答:1

我想在splash屏幕上加载图像,以便我可以使用线圈将请求结果设置到其他屏幕上的背景,但我还无法在线圈中完全实现这一点。如何将线圈请求的结果保存到 Cahce 并在其他屏幕上使用该结果?

启动画面

val imageLoader = ImageLoader.Builder(this)
        .memoryCache {
            MemoryCache.Builder(this)
                .maxSizePercent(0.25)
                .strongReferencesEnabled(true)
                .build()
        }
            
            
        .diskCache {
            DiskCache.Builder()
                .directory(this.cacheDir.resolve("image_cache"))
                .maxSizePercent(0.02)
                .build()
        }
        .build()

我在splash上这样使用

    val context = LocalContext.current
    val request = ImageRequest.Builder(context)
        .memoryCacheKey(Constants.Cache.BACKGROUND_IMAGE_KEY)
        .data("https://www.example/image1.jpg")
        .target(
            onSuccess = {
                viewModel.skipImageRequest()
            },
            onError = {
                viewModel.skipImageRequest()
            }
        )
        .build()
    imageLoader.enqueue(request)

在另一个我想使用图像的屏幕中

@Composable
fun BackgroundImage(
    model: Any?,
    contentDescription: String? = "",
    modifier: Modifier = Modifier.fillMaxSize(),
    //placeholder: Painter? = painterResource(R.drawable.bg_placeholder),
    error: Painter? = painterResource(R.drawable.bg_placeholder),
    fallback: Painter? = painterResource(R.drawable.bg_placeholder),
    alignment: Alignment = Alignment.Center,
    contentScale: ContentScale = ContentScale.FillBounds
) {
    AsyncImage(
        model = ImageRequest.Builder(LocalContext.current)
            .data("https://www.example/image1.jpg")
            .placeholderMemoryCacheKey(Constants.Cache.BACKGROUND_IMAGE_KEY)
            .build(),
        contentDescription = contentDescription,
        modifier = modifier,
        //placeholder = placeholder,
        error = error,
        fallback = fallback,
        alignment = alignment,
        contentScale = contentScale,
    )
}

始终存在一个问题,占位符图像显示在页面初始化中,我无法构造一个在加载图像时占位符不可见的结构,并且直接从 cahce 读取和使用图像。

如果您支持我会很高兴

android kotlin android-jetpack-compose image-loading coil
1个回答
-1
投票

Coil在1.x版本内部使用了OkHttp的DiskCache 对于 2.x,他们引入了磁盘缓存来存储您的结果。

欲了解更多信息,请阅读

© www.soinside.com 2019 - 2024. All rights reserved.