android - 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 的值重新分配给宽度,因此矩形永远不会移动。
解决方案
我觉得你不应该把修改坐标的功能封装成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()
}
推荐阅读
- pentaho - Schema Workbench 中计算成员的问题
- java - Web 应用程序通知声音的最佳方法
- sas - 连续结果变量(有许多零)和使用 SAS 的预测变量之间的关系
- java - 只有INFO 日志被显示。尽管 chaging log4.properties 调试日志不可见
- c++ - 谁能帮我理解这个错误信息?
- javascript - 数组对象的碰撞检测
- android - How to make set TextView.text persistent in Android app (Kotlin)
- sql - 无法显示区域容量为零
- python - 如何获取图像中的边框像素或擦除区域
- javascript - 按钮提交后如何刷新CSS?