Kotlin 绘制相对于形状的线性渐变

Kotlin draw linear gradient relative to shape

我有一个 Paint 对象,其中包含这样的线性渐变:

init{
    this.myPaint.shader = LinearGradient(0f, 0f, 0f, 15f, 0xFF1F9928.toInt(), 0xFF184F1E.toInt(), Shader.TileMode.MIRROR);
}

然后我用它为我的角色画了一个生命条,如下所示:

canvas.drawRect(x, y, x + 100f * fill, y + 15f, this.myPaint)

这很好用。但是当角色随着相机移动时,渐变会保持在原来的位置。这会导致健康栏根据其位置改变颜色。

如何让渐变保持固定在健康栏上,而不是全局坐标系?

我自己从未使用过 LinearGradient,但从 documentation 可以看出。每次调用 drawRect 时都必须配置着色器。渐变保持在初始位置,因为渐变的坐标永远不会改变。

需要更改:

// pass appropriately the coordinates you want here
this.myPaint.shader = LinearGradient(0f, 0f, 0f, 15f, 0xFF1F9928.toInt(), 0xFF184F1E.toInt(), Shader.TileMode.MIRROR);
canvas.drawRect(x, y, x + 100f * fill, y + 15f, this.myPaint)

注意创建对象的创建onDraw

我找到了解决办法。

您必须平移 canvas,并在 (0, 0) 位置绘制渐变。然后恢复 canvas 回来。

canvas.save()
canvas.translate(x, y)
canvas.drawRect(0, 0, 100f * fill, 15f, this.myPaint)
canvas.restore()

这是正确的做法。