我正在尝试使用 绘制折线图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);
Run Code Online (Sandbox Code Playgroud)
如何解决此问题并使线条正确连接?
正如我在评论中告诉您的那样,Paint
只有当您使用Path
.
在drawLine文档中,有一段内容为:“在绘制中忽略样式”,同样的事情也适用于drawLines
方法。
为了测试这一点,我创建了一个简单的自定义视图:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
因此,使用drawLines
部分应用Paint
obj的样式,如颜色,但不应用strokeJoin
类似的属性。drawPath
似乎改为应用所有这些。
如果您遇到性能问题,也许您可以尝试将结果缓存在某处、预先计算动画或尝试使用更简单的动画。
请记住,如果您没有特殊要求,这里有一个很棒的库:MPAndroidChart,它已经有一些内置动画