在Android中部分重绘位图

时间:2015-05-25 00:11:43

标签: android

我正在编写一个Android游戏中的蛇游戏,我被onDraw方法中无法使用循环绘制墙的事实所阻挡,墙只是不显示。

有没有办法可以画出墙,以便onDraw保持完整并继续重绘其他东西(蛇和物体)?

GameView:

  public void surfaceCreated(SurfaceHolder holder) {


                gameLoopThread.setRunning(true);

                gameLoopThread.start();


            }
@Override
    protected void onDraw(final Canvas canvas) {

        canvas.drawColor(Color.WHITE);

        if(drawWall) {

            int i = 0;
            while(i < getWidth()) {
                canvas.drawBitmap(wall.getImage(), i, 0, null);
                i += 17;


            }


            drawWall = false;


        }


        x += dx;
        y += dy;

}

GameLoop:

public class GameLoopThread extends Thread {

private GameView view;

private boolean running = false;



public GameLoopThread(GameView view) {

    this.view = view;

}



public void setRunning(boolean run) {

    running = run;

}



@Override

public void run() {

    while (running) {

        Canvas c = null;

        try {

            c = view.getHolder().lockCanvas();

            synchronized (view.getHolder()) {
                view.onDraw(c);


            }

        } finally {

            if (c != null) {

                view.getHolder().unlockCanvasAndPost(c);

            }

        }

      }

   }
 }

1 个答案:

答案 0 :(得分:0)

我不知道您的视图层次结构是什么,但是,为什么不让您的生活变得更轻松,只需在SurfaceView背后设置一个ImageView的墙壁?或者FrameLayout包含SurfaceView并将墙作为FrameLayout的背景图像?与墙壁的碰撞将在代码和图形表示中处理墙壁真的只是为了用户的利益。

将墙壁的图像放在背景中,让Android担心,只需集中精力重绘蛇和点。

话虽如此,看起来像是在后台线程中画画。你无法在Android上实际操作,你应该在主线程中绘图。