首页 > 解决方案 > kotlin canvas.drawRect 在画布之外绘制

问题描述

所以我试图在 kotlin 中绘制一个矩形,我有一个类可以做到这一点,但我需要画布的大小才能做到这一点,所以在我的主视图中,我在 onDraw() 函数中调用类 setCanvas() 函数,像这样的东西。

主视图

var rectangle = Rectangle()
override fun onDraw(canvas:Canvas) {
    super.onDraw(canvas)
    rectangle.setNewCanvas(canvas)

    rectangle.show()
    rectangle.update()

    invalidate()
}

班级

class Rectangle {
    private var canvas: Canvas? = null
    var x = 0
    var speed = 10
    fun setNewCanvas(newCanvas: Canvas)
        if(canvas == null) {
            canvas = newCanvas
            x = canvas?.width!!
        }
    }

    fun show() {
        canvas?.drawRect(x.toFloat(), 0F, x.toFloat() - 100, 1000F, Paint(Color.RED))
    }

    fun update() {
        x -= speed
    }
}

我试图让矩形在屏幕上移动,但是当我检查 setNewCanvas() 中的画布是否为空时,它会移动,但矩形是在应用程序项目名称所在的横幅中的画布上方绘制的。如果我不检查 canvas 是否为空,那么每次调用都会将 x 的值重新分配给宽度,因此矩形永远不会移动。

标签: androidandroid-studiokotlincanvasgraphics

解决方案


我觉得你不应该把修改坐标的功能封装成Rectangle,不能重复设置canvas。

var x = 0
var speed = 10

fun update() {
  x -= speed
}

override fun onDraw(canvas:Canvas) {
    canvas.drawRect(x.toFloat(), 0F, x.toFloat() - 100, 1000F, Paint(Color.RED))
    rectangle.update()
    invalidate()
}


推荐阅读