如何在 Jetpack Compose 中创建椭圆形渐变

Pri*_*čič 2 android android-jetpack-compose

我需要椭圆形渐变作为背景,但我所能得到的只是完美的圆形渐变Brush.radialGradient(..)

Modifier
    .fillMaxSize()
    .background(
        brush = Brush.radialGradient(
            colors = listOf(Color(0xFFffffff), Color(0xFF000000)),
        ),
    )
Run Code Online (Sandbox Code Playgroud)

这就是我所需要的(椭圆形的形状当然必须与屏幕尺寸比例对齐):

这就是我需要的

但我能产出的只是:

这就是我能够生产的

关于如何解决这个问题有什么想法吗?

Phi*_*hov 7

激进渐变不应该像这样拉伸,它根据距中心的距离确定像素颜色。

我不知道为什么没有“椭圆形”渐变,但 Android 本身就缺少它,而 compose 只是这里的一个中间层。

Android 中通常所做的只是缩放视图。您也可以在撰写时执行此操作:

BoxWithConstraints(
    Modifier
        .fillMaxSize()
) {
    val aspectRatio = maxWidth / maxHeight
    Box(
        Modifier
            .fillMaxSize()
            .scale(maxOf(aspectRatio, 1f), maxOf(1 / aspectRatio, 1f))
            .background(
                brush = Brush.radialGradient(
                    colors = listOf(Color(0xFFffffff), Color(0xFF000000)),
                ),
            )
    )
}
Run Code Online (Sandbox Code Playgroud)

这里我使用BoxWithConstraintsgetmaxWidthmaxHeight来计算所需的比例。

在此输入图像描述