2011-11-03 51 views
0

我有绘制到画布的等轴测图。当我尝试移动地图时,这些黑色的线条闪烁在一些瓷砖之间,使整个外观看起来很差。绘制到Android上的画布 - 屏幕闪烁/撕裂

这里是从我更新线程相关的代码

public void run() { 
    Canvas c; 
    while (isRunning){ 
     c = null; 
     try { 
      c = cellMap.getHolder().lockCanvas(null); 
      synchronized (cellMap.getHolder()) { 
       cellMap.onDraw(c); 
      } 
     } finally { 
      if(c != null){ 
       cellMap.getHolder().unlockCanvasAndPost(c); 
      } 
     } 
    } 
} 

和从我CellMap类(其延伸SurfaceView):

public void onDraw(Canvas canvas){ 
    canvas.drawColor(Color.BLACK); 
    int x = 0; 
    int y = 0; 

    for(int i = 0; i < mapSize; i++){ 
     for(int j = 0; j < mapSize; j++){ 
      x = (i-j) * 30 + xOffset; 
      y = (i+j) * 15 + yOffset; 
      mapCells[i][j].draw(canvas, paint, x, y); 
     } 
    } 

mapCells[][]是包含位图图像对象的阵列需要绘制。 draw()函数只有1行canvas.drawBitmap(bitmapImage, x, y, null)

我发现删除行Canvas.draw(Color.black)摆脱了闪烁。但是,当我移动地图时,画布没有清除,所以我仍然可以看到前一帧的图像。我想象是因为绘制位图花了太长时间?但目前地图只是非常小。

回答

1

我发现了这个问题。移动地图时,偏移值正在改变。这导致地图的各个部分临时以不同的偏移值绘制 - 创建撕裂。咄!

我通过在onDraw()方法开始处复制xOffsetyOffset值并将这些值用于更新来解决此问题。