Android:使用Jetpack Compose画渐变背景

系列文章目录



前言

在这里插入图片描述

如上图所示,当UI设计中有渐变背景的控件时,传统方式可以使用xml来画,但是,渐变色最多只能设置3种(即起始颜色,中间颜色,结束颜色),更多的颜色不支持;或者直接美工切图,由于内容长度不固定,可能还需要制作.9.png图片,并设置拉伸区域,麻烦且会比较占用APK大小。现在我们完全可以使用Compose纯Kotlin代码来实现,支持多个色渐变。


一、Brush(笔刷)

系统默认提供了五种Brush(笔刷),分别是:horizontalGradient(横向渐变)、verticalGradient(纵向渐变)、linearGradient(线性渐变)、radialGradient(环形渐变)、sweepGradient(扫描渐变)。

1. horizontalGradient(横向渐变)

1.1 仅设置颜色

		Box(
            modifier = Modifier
                .size(100.dp, 40.dp)
                .background(
                    brush = Brush.horizontalGradient(
                        listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        )
                    )
                )
        )

请添加图片描述

1.2.平铺模式:Clamp(夹紧)

	Box(
            modifier = Modifier
                .size(100.dp, 40.dp)
                .background(
                    brush = Brush.horizontalGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        ),
                        startX = 50f,
                        endX = 150f,
                        tileMode = TileMode.Clamp
                    )
                )
        )

横向渐变
渐变位置(X轴):50f——150f
平铺模式:Clamp(夹紧)
在这里插入图片描述

1.3.平铺模式:Decal(印花)

	Box(
            modifier = Modifier
                .size(100.dp, 40.dp)
                .background(
                    brush = Brush.horizontalGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        ),
                        startX = 50f,
                        endX = 150f,
                        tileMode = TileMode.Decal
                    )
                )
        )

横向渐变
渐变位置(X轴):50f——150f
平铺模式:Decal(印花)
在这里插入图片描述

1.4.平铺模式:Mirror(镜面)

Box(
            modifier = Modifier
                .size(100.dp, 40.dp)
                .background(
                    brush = Brush.horizontalGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        ),
                        startX = 50f,
                        endX = 150f,
                        tileMode = TileMode.Mirror
                    )
                )
        )

横向渐变
渐变位置(X轴):50f——150f
平铺模式:Mirror(镜面)
在这里插入图片描述

1.5.平铺模式:Repeated(重复)

	Box(
            modifier = Modifier
                .size(100.dp, 40.dp)
                .background(
                    brush = Brush.horizontalGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        ),
                        startX = 50f,
                        endX = 150f,
                        tileMode = TileMode.Repeated
                    )
                )
        )

横向渐变
渐变位置(X轴):50f——150f
平铺模式:Repeated(重复)
在这里插入图片描述

2. verticalGradient(纵向渐变)

	Box(
            modifier = Modifier
                .size(40.dp, 100.dp)
                .background(
                    brush = Brush.verticalGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        ),
                        startY = 50f,
                        endY = 150f,
                        tileMode = TileMode.Clamp
                    )
                )
        )

纵向渐变
渐变位置(Y轴):50f——150f
平铺模式:Clamp(夹紧)
在这里插入图片描述

3.linearGradient(线性渐变)

3.1.默认是从左上角向右下角渐变

	Box(
            modifier = Modifier
                .size(100.dp, 50.dp)
                .background(
                    brush = Brush.linearGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        )
                    )
                )
        )

在这里插入图片描述

3.2.设置渐变位置

	Box(
            modifier = Modifier
                .size(100.dp, 50.dp)
                .background(
                    brush = Brush.linearGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        ),
                        start = Offset(0f, 0f),
                        end = Offset(100f, 50f)
                    )
                )
        )

线性渐变
起始位置坐标:(0,0)
结束位置坐标:(100,50)
在这里插入图片描述

4. radialGradient(环形渐变)

4.1. 默认

	Box(
            modifier = Modifier
                .size(50.dp, 50.dp)
                .background(
                    brush = Brush.radialGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        )
                    )
                )
        )

在这里插入图片描述

4.2. 设置中心坐标与半径

	Box(
            modifier = Modifier
                .size(50.dp, 50.dp)
                .background(
                    brush = Brush.radialGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        ),
                        center = Offset(30f, 30f),
                        radius = 20f
                    )
                )
        )

环形渐变
中心坐标:(30,30)
半径:20
在这里插入图片描述

5. sweepGradient(扫描渐变)

5.1.默认

	Box(
            modifier = Modifier
                .size(50.dp, 50.dp)
                .background(
                    brush = Brush.sweepGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        )
                    )
                )
        )

在这里插入图片描述

5.2. 设置中心坐标

Box(
            modifier = Modifier
                .size(50.dp, 50.dp)
                .background(
                    brush = Brush.sweepGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        ),
                        center = Offset(30f, 30f)
                    )
                )
        )

扫描渐变
中心坐标:(30,30)
在这里插入图片描述

6.自定义颜色之间的过渡位置

通过传入Pair<Float, Color>类型的多个颜色,还可以控制颜色之间的过渡位置。
例如:

Brush.linearGradient(
     0.0f to Color.Red,
     0.3f to Color.Green,
     1.0f to Color.Blue,
     start = Offset(0.0f, 50.0f),
     end = Offset(0.0f, 100.0f)
)

二、实例:渐变圆角矩形边框

代码如下:

Box(
            modifier = Modifier
                .size(100.dp, 50.dp)
                .border(
                    brush = Brush.linearGradient(
                        colors = listOf(
                            Color.Red,
                            Color.Green,
                            Color.Blue
                        )
                    ),
                    width = 1.dp,
                    shape = RoundedCornerShape(4.dp)
                )
        )

在这里插入图片描述


总结

以上就是今天要讲的内容,平时使用Compose画控件背景还是非常简单的,基本上用不到xml,这也是Compose的目标,抛弃xml的画布局方式。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两块三刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值