gpt4 book ai didi

android - Paint.setStrokeJoin 不适用于 canvas.drawLines

转载 作者:行者123 更新时间:2023-12-05 00:12:35 31 4
gpt4 key购买 nike

我正在尝试使用 canvas.drawLines(...) 绘制折线图,​​但线条似乎没有正确连接。据我了解,使用 Paint.setStrokeJoin 应该使用斜接连接:

chartLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
chartLinePaint.setStyle(Paint.Style.STROKE);
chartLinePaint.setStrokeJoin(Paint.Join.MITER);
chartLinePaint.setStrokeWidth(6.0f);

如何解决这个问题并使线条正确连接?

enter image description here

最佳答案

正如我在评论中告诉您的那样,Paint 对象只有在您使用 Path 绘制它们时才会完全应用。

drawLine文档中有一个段落:“绘画中忽略了样式”,同样的事情也应用于drawLines 方法。

为了对此进行测试,我创建了一个简单的自定义 View :

class CanvasTestView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {

private val textPaint1 = Paint(ANTI_ALIAS_FLAG).apply {
style = Paint.Style.STROKE
strokeJoin = Paint.Join.MITER
strokeWidth = 12.0f
color = Color.RED
}

private val textPaint2 = Paint(ANTI_ALIAS_FLAG).apply {
style = Paint.Style.STROKE
strokeJoin = Paint.Join.MITER
strokeWidth = 12.0f
color = Color.BLUE
}

@SuppressLint("DrawAllocation")
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)

canvas?.apply {

val floatArray = floatArrayOf(250f, 550f, 450f, 200f, 450f, 200f, 650f, 700f)
drawLines(floatArray, textPaint2)

val path = Path()
path.moveTo(200f, 500f)
path.lineTo(400f, 200f)
path.lineTo(600f, 700f)
drawPath(path, textPaint1)
}

}
}

结果是这样的:

enter image description here

因此使用 drawLines 部分应用 Paint obj 的样式,如颜色,但不应用 strokeJoin 等属性。 drawPath 似乎改为应用所有这些。

如果您遇到性能问题,也许您可​​以尝试将结果缓存在某处,预先计算动画或尝试使用更简单的动画。

Remember that if you don't have particular requirements there is this awesome library: MPAndroidChart which already has some built-in animations

关于android - Paint.setStrokeJoin 不适用于 canvas.drawLines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55246353/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com