Qui*_*don 10

嘿,我从这里偷走了这个:在Android中用SweepGradient画一个圆弧

但它工作正常,我使用的是LinearGradient.

Shader gradient = new SweepGradient (0,getMeasuredHeight()/2, Color.RED, Color.WHITE);
lightRed.setShader(gradient);
canvas.drawArc(rectf, -90, 360, false, lightRed);
Run Code Online (Sandbox Code Playgroud)


Ser*_*aka 9

在我的事业中,我不得不画这样的人:

也许你也是。

所以,让我们想想!Sweep Gradient 是如何工作的?如果你通过这个绘制矩形:

     private val colors = intArrayOf(ContextCompat.getColor(context, R.color.progress_from_color),
 ContextCompat.getColor(context, R.color.progress_to_color))

    private var positions = floatArrayOf(0.0f, 1.0f)
    private var sweepGradient : SweepGradient? = null

    sweepGradient = SweepGradient(w / 2F,h / 2F,colors,  positions)
Run Code Online (Sandbox Code Playgroud)

将会:

所以想法是旋转它!

 sweepGradient.apply {
            val rotate = 270f
            val gradientMatrix = Matrix()
            gradientMatrix.preRotate(rotate, mWidth / 2F, mHeight / 2F)
            setLocalMatrix(gradientMatrix)
        }
Run Code Online (Sandbox Code Playgroud)

最后我们可以绘制弧线:

 mPaint.shader = gradient
 canvas.drawArc(rectF, startAngle, finishedSweepAngle, false, mPaint)
Run Code Online (Sandbox Code Playgroud)

在 github存储库上查看我的完整自定义视图源代码