android - Jetpack Compose 中的图像渐变

标签 android gradient android-jetpack-compose

这是我的组件:

@Composable
fun Cover(
    name: String,
    imageRes: Int,
    modifier: Modifier = Modifier.padding(16.dp, 8.dp)
) {
    Box(modifier) {
        Card(
            shape = RoundedCornerShape(4.dp),
            backgroundColor = MaterialTheme.colors.secondary,
            elevation = 4.dp
        ) {
            Stack {
                Image(
                    imageResource(imageRes),
                    modifier = Modifier
                        .gravity(Alignment.Center)
                        .aspectRatio(2f),
                    contentScale = ContentScale.Crop,
                )

                Text(
                    text = name,
                    modifier = Modifier
                        .gravity(Alignment.BottomStart)
                        .padding(8.dp),
                    style = MaterialTheme.typography.h6
                )
            }
        }
    }
}
这是它的外观:
cover
我想在 Image 上显示深色渐变在 Text 后面使文本易于阅读。我想我必须使用 LinearGradientRadialGradient但由于缺乏文档,我无法做到。
编辑:This是我想要做的,但使用 Jetpack Compose。

最佳答案

1.0.0你可以使用类似的东西:

var sizeImage by remember { mutableStateOf(IntSize.Zero) }

val gradient = Brush.verticalGradient(
    colors = listOf(Color.Transparent, Color.Black),
    startY = sizeImage.height.toFloat()/3,  // 1/3
    endY = sizeImage.height.toFloat()
)

Box(){
    Image(painter = painterResource(id = R.drawable.banner),
        contentDescription = "",
    modifier = Modifier.onGloballyPositioned {
        sizeImage = it.size
    })
    Box(modifier = Modifier.matchParentSize().background(gradient))
}
原来的:
enter image description here
后:
enter image description here
您还可以将渐变应用到 Image()使用 .drawWithCache 修饰符和 onDrawWithContent 允许开发人员在布局内容之前或之后进行绘制。
  Image(painter = painterResource(id = R.drawable.conero),
      contentDescription = "",
      modifier = Modifier.drawWithCache {
          val gradient = Brush.verticalGradient(
              colors = listOf(Color.Transparent, Color.Black),
              startY = size.height/3,
              endY = size.height
          )
          onDrawWithContent {
              drawContent()
              drawRect(gradient,blendMode = BlendMode.Multiply)
          }
      }
  )
enter image description here

关于android - Jetpack Compose 中的图像渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63871706/

相关文章:

ios - 如何在 View 中沿对角线显示渐变

android - 撰写 : Place view between two backgrounds

java - 字符串编码不输出所有字符

java - 如何使用 Java 中的 AnyChart for Android 创建 BubbleMap

android - BLE <-> Android, iOS设备通信是否需要Bonding?

android - 以编程方式添加具有纯色和描边的渐变

Android LinearLayout 渐变背景

Android 在 AsyncTask 中下载大型 JSON

android - 单选对话框项目文本未与单选按钮对齐

android - 删除发布版本的 Jetpack Compose 测试标签