我在画布上绘制了一个等距图。当我试着移动地图时,这些黑线在一些贴图之间闪烁,让整个画面看起来很糟糕。
这是我的更新线程的相关代码
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)
行可以消除闪烁。然而,当我移动地图时,画布没有被清除,所以我仍然看到来自前一帧的图像。我想是因为画位图花的时间太长了吧?但是目前这张地图非常小。
我找到问题了。当移动地图时,偏移值被改变了。这导致地图的部分被暂时用不同的偏移值绘制-创建撕裂。咄!
我通过在onDraw()
方法开始处复制xOffset
和yOffset
值来解决这个问题,并使用这些值进行更新。