android 在JetpackCompose上加载GlideImage时应用渐变

piwo6bdm  于 2022-11-27  发布在  Android
关注(0)|答案(1)|浏览(639)

我想在载入图像的同时将渐变作为载入状态应用到GlideImage。我该怎么做?
目前我正在放置一个渐变框和里面的图像,但这并不适用于没有背景的图像。
我目前的代码是:

Box(
        modifier = Modifier.background(
            brush = Brush.linearGradient(
                listOf(
                    Gray,
                    Color.White
                )
            )
        )
    ) {
        GlideImage(
            model = banner.imageUrl,
            contentDescription = null,
            contentScale = ContentScale.FillHeight,
            modifier = Modifier.coloredShadow(ShadowBannerImage, 0.28f)
        )
    }

例如,在这种情况下,它接收到一个PNG图像,由于GlideImage在一个带有渐变的框中,渐变将出现在图像后面,产生一个图像作为背景的效果,这是不应该发生的。图像应该只有在Glide加载它时才有背景。

a8jjtwal

a8jjtwal1#

目前bumptech glide不支持占位符或加载合成对象。
类似地,虽然Glide的占位符、错误和回退请求选项可以工作,并且可以通过GlideImage的RequestBuilderTransform提供,但我们目前不支持为这些状态中的每一个提供自定义组合函数。
所以我建议大家使用landscapist .,它的签名是这样的:

@Composable
public fun GlideImage(
    imageModel: () -> Any?,
    modifier: Modifier = Modifier,
    glideRequestType: GlideRequestType = GlideRequestType.DRAWABLE,
    requestBuilder: @Composable () -> RequestBuilder<*> = {
        LocalGlideProvider.getGlideRequestBuilder()
    },
    requestOptions: @Composable () -> RequestOptions = {
        LocalGlideProvider.getGlideRequestOptions()
    },
    requestListener: (() -> RequestListener<Any>)? = null,
    component: ImageComponent = rememberImageComponent {},
    imageOptions: ImageOptions = ImageOptions(),
    onImageStateChanged: (GlideImageState) -> Unit = {},
    @DrawableRes previewPlaceholder: Int = 0,
    loading: @Composable (BoxScope.(imageState: GlideImageState.Loading) -> Unit)? = null,
    success: @Composable (BoxScope.(imageState: GlideImageState.Success) -> Unit)? = null,
    failure: @Composable (BoxScope.(imageState: GlideImageState.Failure) -> Unit)? = null
)

您可以将梯度组合设置为GlideImage的加载参数:

GlideImage(
    ...
    loading = Box( modifier = Modifier.background(
                        brush = Brush.linearGradient(
                          listOf(Gray, Color.White)
                        ))
                 ) 
 )

相关问题