shape: gradient angle 必须45整数倍

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="270"
        android:endColor="#051d3e"
        android:startColor="#062a53"
        android:type="linear" />
</shape>

一、你当前代码中每个参数的含义

<shape
    android:shape="rectangle">

android:shape="rectangle"

  • 表示这是一个矩形 Shape
  • 可用于 background / src / foreground

<gradient
    android:angle="45"
    android:startColor="#062a53"
    android:endColor="#051d3e"
    android:type="linear"
    android:useLevel="true" />

1️⃣ android:type="linear"

  • 渐变类型

  • 可选值:

    • linear(线性,最常用)
    • radial(径向)
    • sweep(扫描)

👉 你这里是 线性渐变


2️⃣ android:startColor

  • 渐变起点颜色
  • 出现在“渐变方向的起点”

3️⃣ android:endColor

  • 渐变终点颜色
  • 出现在“渐变方向的终点”

4️⃣ android:angle="45"(重点)

定义渐变方向(角度)

⚠️ Android 的角度规则不是数学坐标系

官方规则(必须记住)👇
angle渐变方向
0左 → 右
90下 → 上
180右 → 左
270上 → 下
45左下 → 右上
135右下 → 左上
225右上 → 左下
315左上 → 右下

5️⃣ android:useLevel="true"

⚠️ 这是一个高级属性

  • 仅在 LevelListDrawable 中才有意义
  • 表示颜色随 level (0–10000) 变化
  • 作为普通背景,应该设为 false 或直接删除

👉 你现在这个场景:不需要它


二、你现在的效果为什么不符合预期?

你当前是:

android:angle="45"

等价于:

左下 → 右上

但你期望的是:

左上浅色 → 右下深色

所以方向 错了


三、正确实现:左上浅色 → 右下深色 ✅

✅ 正确 angle:315

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <gradient
        android:type="linear"
        android:angle="315"
        android:startColor="#062a53"  <!-- 左上:浅色 -->
        android:endColor="#051d3e"    <!-- 右下:深色 -->
        android:useLevel="false" />
</shape>

如果不写 useLevel(推荐)

<gradient
    android:type="linear"
    android:angle="315"
    android:startColor="#062a53"
    android:endColor="#051d3e" />

四、快速自检口诀(强烈建议记住)

想象一条箭头:

startColor → endColor

你要的是:

左上  →  右下

对应:

angle = 315

五、常见错误总结(你已经踩到一个)

错误后果
angle 用 45方向完全反
useLevel=true渐变可能异常
颜色写反看起来“怪”
不理解 angle调半天调不对

六、进阶建议(可选)

如果你后面还要:

  • 深色模式
  • 动态主题
  • 不同尺寸渐变比例

可以升级为:

  • MaterialShapeDrawable
  • Compose / Shader
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值