在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)行可以消除闪烁。然而,当我移动地图时,画布没有被清除,所以我仍然看到来自前一帧的图像。我想是因为画位图花的时间太长了吧?但是目前这张地图非常小。

我找到问题了。当移动地图时,偏移值被改变了。这导致地图的部分被暂时用不同的偏移值绘制-创建撕裂。咄!

我通过在onDraw()方法开始处复制xOffsetyOffset值来解决这个问题,并使用这些值进行更新。

最新更新