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()
这是正确的做法。
我有一个 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()
这是正确的做法。