在画布的整个高度上绘制垂直线?

时间:2018-08-13 10:06:01

标签: android canvas kotlin drawing

我有以下代码:

class Canvass(context: Context) : View(context) {

    override fun onDraw(canvas: Canvas) {

        canvas.drawRGB(255, 255, 255)

        val width = width
        val height = height

        val paint = Paint()

        var offset = 50
        paint.setARGB(255, 0, 0, 0)

        paint.setStrokeWidth(2f)

        for (i in 0..100) {
            canvas.drawLine(0f, 30f + offset, width.toFloat(), 30f + offset, paint)
            offset += 40

        }

        canvas.drawLine(150f, 0f, width.toFloat(), height.toFloat() , paint)

    }
}

它产生以下内容:

result 1

但是我希望结果中的 倾斜 行是垂直的。

当我更改时:

canvas.drawLine(150f, 0f, width.toFloat(), height.toFloat() , paint)

类似于:

canvas.drawLine(150f, 0f, width.toFloat(), 16000F, paint)

它更接近垂直,但仍然偏斜:

result 2

1 个答案:

答案 0 :(得分:3)

canvas.drawLine(150f, //Start at x == 150
        0f, // And y = 0
        width.toFloat(),// Continue to x = width 
        height.toFloat(), //And y = height

        paint) // Not relevant to the position

您的x值必须匹配才能垂直。 X是与宽度匹配的值。当x值为150且宽度为1时,它将最终像这样。

直线始终具有匹配的x y坐标,具体取决于方向。因此,要使其正常工作,您需要将width.toFloat()更改为150f或其他某个值。


我也强烈建议您阅读坐标系。您可以查看this。尽管它涵盖了Java代码,但仍与Android上的系统相同。