[英]How do I draw an arc with gradient in Android?
我需要这张图片
在 Android 中绘制为自定义视图(或其他)。 另外梯度不应该是 static,它应该根据输入旋转(想象温度从 -10 到 +40,它应该从全蓝到全红,中间状态)。
我发现我需要两个位图:一个渐变矩形和一个蒙面弧。 然后我可以旋转渐变矩形,就是这样。 关键是我不能在矩形上方(或下方)放置蒙版。
我试图重现这个答案,但没有成功。 我只能用渐变绘制弧线,但显然这还不够。 我也知道下面的代码是一团糟,但它应该是一个概念证明。
class GradientArc(context: Context, attrs: AttributeSet) : View(context, attrs) {
private val shader1: Shader = LinearGradient(375f,
0f,
425f,
0f,
Color.rgb(59, 242, 174),
Color.rgb(101, 172, 242),
Shader.TileMode.CLAMP)
private val paint: Paint = Paint()
val imagePaint = Paint().apply { setXfermode(PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); }
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val conf: Bitmap.Config = Bitmap.Config.ARGB_8888
val mImage: Bitmap = Bitmap.createBitmap(width, height, conf)
val imageCanvas = Canvas(mImage)
paint.setStrokeWidth(70f)
paint.setStyle(Paint.Style.STROKE)
paint.setStrokeCap(Paint.Cap.ROUND)
paint.setAntiAlias(true)
paint.setShader(shader1)
val radius = 400
val oval = RectF()
val center_x = 500f
val center_y = 500f
oval[center_x - radius, center_y - radius, center_x + radius] = center_y + radius
imageCanvas.drawArc(oval, 135f, 270f, false, paint)
canvas.save()
canvas.drawBitmap(mImage, 0f, 0f, imagePaint)
canvas.restore()
}
}
我想没有人会编写所有这些代码来解决我的问题,但你能给我至少一些例子吗? 示例最好包含渐变、蒙版和手动绘制一些图形。
我找到了这篇文章,但我不能 map 它适用于我的情况,因为作者不使用自定义图形并且并非所有代码示例都有效。
我建议创建一个 bitmap (或任何图像资源),拱门(即图中的彩色区域)是透明的。 然后将这个 bitmap 放在方形盒子的顶部,在方形盒子本身上应用渐变。 这可能是一种更简单的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.