绘制帆布内定制的彩色弧线
我非常需要帮助。 需要在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
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)
}
}
this is what i get :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试将所有“ false”更改为canvas.drawarc()中的“ true”
Try change all "false" to "true" in canvas.drawArc()