如何重绘部分画布?

时间:2013-08-25 15:38:26

标签: android android-canvas ondraw invalidation surfaceholder

我是新手。我用Canvas做了一个简单的游戏。我在onDraw()方法中编写了几乎所有代码,并且有很多计算。在我的代码中onDraw()的末尾有一个invalidate()方法。这就是我打电话来重绘我的观点的方式。如何仅重绘Canvas的一部分?主要问题是我在onDraw()中有很多计算,它会减慢整个游戏的速度。我试着像这里一样使用位图:

creating a bitmap - stackOverflow

但它没有解决问题,因为创建位图的过程太慢。使用SurfaceHolder和Callback是个好主意吗?我试图使用它,但我不知道这是否是一种正确的方式来做我想做的事情。有谁能够帮我?如何仅部分重绘我的视图以停止所选元素总是通过新计算重绘(从保存状态中绘制它们)?我想只在需要时重绘整个视图。如果有人发布一个可以解决这个问题的代码(它甚至可能是两个矩形),那将会很棒。

2 个答案:

答案 0 :(得分:1)

使用相同的位图而不是创建新位图,并调用invalidate with a rectangle(或使用边界)作为参数。

在onDraw中,你可以调用canvas.getClipBounds()来查找要激活的矩形。

另外,为了改进代码,请尽量避免在onDraw方法上创建新对象。

事实上,如果它是一个沉重的游戏,请考虑使用openGL。为简单起见,您可以使用第三方库,如libGDX或AndEngine。

答案 1 :(得分:1)

尝试在Class方法中创建Bitmaps并从onDraw()调用它们。

   public class DrawView extends View {

         public DrawView(Context context, AttributeSet attributeSet) {
         super.DrawView(context attributeSet)
          //Create your bitmaps in here
         }
   }