Paint.setStrokeJoin 不适用于 canvas.drawLines

mak*_*tar 2 android canvas

我正在尝试使用 绘制折线图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)

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

在此处输入图片说明

Mat*_*Pag 5

正如我在评论中告诉您的那样,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部分应用Paintobj的样式,如颜色,但不应用strokeJoin类似的属性。drawPath似乎改为应用所有这些。

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

请记住,如果您没有特殊要求,这里有一个很棒的库:MPAndroidChart,它已经有一些内置动画