【发布时间】:2013-08-26 04:27:57
【问题描述】:
我是新手。我使用 Canvas 制作了一个简单的游戏。我在 onDraw() 方法中编写了几乎所有的代码,那里有很多计算。在我的代码中 onDraw() 的末尾有一个 invalidate() 方法。这就是我调用重绘视图的方式。如何仅重绘 Canvas 的一部分?主要问题是我在 onDraw() 中有很多计算,它会减慢整个游戏的速度。我尝试使用像这里这样的位图:
creating a bitmap - stackOverflow
但它并没有解决问题,因为创建位图的过程太慢了。使用 SurfaceHolder 和 Callback 是个好主意吗?我尝试使用它,但我不知道这是否是做我想做的事情的正确方法。有谁能够帮我?如何仅部分重绘我的视图以停止始终通过新计算重绘所选元素(从保存状态绘制它们)?我只想在需要时重绘整个视图。如果有人发布可以解决此问题的代码(甚至可以是两个矩形),那就太好了。
【问题讨论】:
-
首先,您不应该在
onDraw内进行大量计算或内存分配。它们必须在 invalidate 被调用之前完成。您可以添加一个执行这些计算的新线程。在他们完成调用 postInvalidate(); 之后。并且不要自己调用onDraw,invalidate或postInvalidate自己调用。
标签: android android-canvas ondraw invalidation surfaceholder