我有一张等长的地图,我画到画布上。当我尝试移动地图时,这些黑色线条在一些瓷砖之间闪烁,使整个东西看起来相当粗制滥造。
以下是我更新帖子的相关代码
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[][]
是一个包含需要绘制的Bitmap图像的对象数组。 draw()
函数只有一行canvas.drawBitmap(bitmapImage, x, y, null)
我发现删除行Canvas.draw(Color.black)
可以消除闪烁。但是,当我移动地图时,画布不会被清除,所以我仍然可以看到前一帧中的图像。我想这是因为绘制位图花了太长时间?但目前地图只是很小。
答案 0 :(得分:2)
我发现了问题。移动地图时,偏移值正在改变。这导致地图的某些部分被临时绘制,具有不同的偏移值 - 创建撕裂。杜!
我通过在xOffset
方法的开头复制yOffset
和onDraw()
值并使用这些值进行更新来解决此问题。