0

我需要这张图片

我需要的

在 Android 中作为自定义视图(或其他东西)绘制。另外梯度不应该是静态的,它应该根据输入旋转(想象温度从-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()
    }
}

我想没有人会编写所有这些代码来解决我的问题,但你能给我至少一些例子吗?示例最好包含渐变、蒙版和手动绘制一些图形。

我找到了这篇文章,但我无法将其映射到我的案例,因为作者不使用自定义图形,并且并非所有代码示例都有效。

4

1 回答 1

0

我建议创建一个透明的拱门(即图中的彩色区域)的位图(或任何图像资源)。然后把这个位图放在一个方形盒子的顶部,渐变应用到方形盒子本身。这可能是一种更简单的方法。

于 2021-03-22T07:55:39.187 回答