繁体   English   中英

如何在 Android 中绘制带有渐变的弧?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM