绘制帆布内定制的彩色弧线

发布于 2025-02-04 16:16:04 字数 2860 浏览 5 评论 0原文

我非常需要帮助。 需要在CustomView中的画布内绘制此渐变彩色视图。 但是无法实现。角度和圆形定位还可以,但是颜色发疯,表现出错误的,变质的颜色。请一些经验丰富的人能指导我通过这块画布来吸引疯狂吗? 这就是我想实现的目标

”目标视图“



class CustomWheel : View {
    constructor(context: Context) : super(context, null)
    constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet, 0)
    constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
        context,
        attributeSet,
        defStyleAttr
    )
    val section1Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint1start),resources.getColor(R.color.paint1end)),
            floatArrayOf(0f, 0.5f), Shader.TileMode.MIRROR)
         this.shader = gradient

    }
    val section2Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint2start),resources.getColor(R.color.paint2end)),
            floatArrayOf(0f, 1f), Shader.TileMode.MIRROR)
        this.shader = gradient

    }
    val section3Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint3start),resources.getColor(R.color.paint3end)),
            floatArrayOf(0f, 1f), Shader.TileMode.MIRROR)
        this.shader = gradient

    }
    val section4Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint4start),resources.getColor(R.color.paint4end)),
            floatArrayOf(0f, 1f), Shader.TileMode.MIRROR)
        this.shader = gradient

    }
    val section5Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint5start),resources.getColor(R.color.paint5end)),
            floatArrayOf(0f, 1f), Shader.TileMode.MIRROR)
        this.shader = gradient

    }


    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        val x = ((width - height / 2) / 2).toFloat()
        val y = (height / 4).toFloat()
        val oval = RectF(x, y, width - x, height - y)


        canvas?.drawArc(oval, 0F, 72F, false, section1Paint)
        canvas?.drawArc(oval, 72F, 144F, false, section2Paint)
        canvas?.drawArc(oval, 144F, 216F, false, section3Paint)
        canvas?.drawArc(oval, 216F, 288F, false, section4Paint)
        canvas?.drawArc(oval, 288F, 360F, false, section5Paint)


    }
}

“

这就是我得到的:)

I am in quite need of help.
Need to draw this gradient colored view inside canvas in customview.
But cant achieve it. angles and circular positioning is okay but colors are going crazy and showing wrong,spoiled colors. Can some experienced one guide me through this canvas drawing crazyness,please ?
this is what i want to achieve

target view



class CustomWheel : View {
    constructor(context: Context) : super(context, null)
    constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet, 0)
    constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
        context,
        attributeSet,
        defStyleAttr
    )
    val section1Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint1start),resources.getColor(R.color.paint1end)),
            floatArrayOf(0f, 0.5f), Shader.TileMode.MIRROR)
         this.shader = gradient

    }
    val section2Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint2start),resources.getColor(R.color.paint2end)),
            floatArrayOf(0f, 1f), Shader.TileMode.MIRROR)
        this.shader = gradient

    }
    val section3Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint3start),resources.getColor(R.color.paint3end)),
            floatArrayOf(0f, 1f), Shader.TileMode.MIRROR)
        this.shader = gradient

    }
    val section4Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint4start),resources.getColor(R.color.paint4end)),
            floatArrayOf(0f, 1f), Shader.TileMode.MIRROR)
        this.shader = gradient

    }
    val section5Paint = Paint().apply {
        val gradient = LinearGradient(0f,0f,0f,20f,
            intArrayOf(resources.getColor(R.color.paint5start),resources.getColor(R.color.paint5end)),
            floatArrayOf(0f, 1f), Shader.TileMode.MIRROR)
        this.shader = gradient

    }


    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        val x = ((width - height / 2) / 2).toFloat()
        val y = (height / 4).toFloat()
        val oval = RectF(x, y, width - x, height - y)


        canvas?.drawArc(oval, 0F, 72F, false, section1Paint)
        canvas?.drawArc(oval, 72F, 144F, false, section2Paint)
        canvas?.drawArc(oval, 144F, 216F, false, section3Paint)
        canvas?.drawArc(oval, 216F, 288F, false, section4Paint)
        canvas?.drawArc(oval, 288F, 360F, false, section5Paint)


    }
}

result

this is what i get :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

汹涌人海 2025-02-11 16:16:04

尝试将所有“ false”更改为canvas.drawarc()中的“ true”

Try change all "false" to "true" in canvas.drawArc()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文