设置背景到我的画布不起作用

时间:2016-09-17 06:14:12

标签: java android canvas

我想将背景设置为我的画布。在我将颜色设置到我的画布之前,它可以正常工作。 现在我想将图像设置为它。当我使用它时,它会返回黑屏。

这是我的代码:

public class GameThread implements Runnable {
Bitmap BTank, TShell;
private final Paint scorePaint = new Paint();
private final SurfaceHolder surfaceHolder;
private final GameTimer timer = new GameTimer();
private final OnGameOver gameOverListener;
private final ProjectileManager projectileManager;
private final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
private final Paint linePaint = new Paint();
private final Paint linePaintBlur = new Paint();

private volatile ScheduledFuture<?> self;

private int score = 0;
private int width = 0;
private boolean isRunning = false;
private SparseArrayCompat<TimedPath> paths;

public GameThread(SurfaceHolder surfaceHolder, ProjectileManager projectileManager, OnGameOver gameOverListener) {
this.surfaceHolder = surfaceHolder;
this.projectileManager = projectileManager;
this.gameOverListener = gameOverListener;
}

public void pauseGame() {
isRunning = false;
timer.pauseGame();
}

public void resumeGame(int width, int height) {
this.width = width;
isRunning = true;
timer.resumeGame();
projectileManager.setWidthAndHeight(width, height);
}

public void startGame(int width, int height) {
this.width = width;
this.isRunning = true;
this.projectileManager.setWidthAndHeight(width, height);
this.timer.startGame();
this.self = executor.scheduleAtFixedRate(this, 0, 10, TimeUnit.MILLISECONDS);

this.scorePaint.setColor(Color.RED);
this.scorePaint.setAntiAlias(true);
this.scorePaint.setTextSize(38.0f);

this.linePaint.setAntiAlias(true);
this.linePaint.setColor(Color.YELLOW);
this.linePaint.setStyle(Paint.Style.STROKE);
this.linePaint.setStrokeJoin(Paint.Join.ROUND);
this.linePaint.setStrokeWidth(5.0f);

this.linePaintBlur.set(this.linePaint);
this.linePaintBlur.setMaskFilter(new BlurMaskFilter(9.0f, BlurMaskFilter.Blur.NORMAL));
}

@Override
public void run() {
Canvas canvas = null;
if (isRunning) {
    try {

    if (timer.isGameFinished()) {
        isRunning = false;
        gameOverListener.onGameOver(score);
        self.cancel(true);
    } else {

        projectileManager.update();

        if (paths != null && paths.size() > 0) {
        List<TimedPath> allPaths = new ArrayList<TimedPath>();
        for (int i = 0; i < paths.size(); i++) {
            allPaths.add(paths.valueAt(i));
        }
        score += projectileManager.testForCollisions(allPaths);
        }

        canvas = surfaceHolder.lockCanvas();
        if (canvas != null) {
        synchronized (surfaceHolder) {

  //                canvas.drawARGB(228, 181,117, 0);

            Bitmap board =  BitmapFactory.decodeResource(Resources.getSystem(),R.drawable.bg);
            canvas.drawBitmap(board, 0, 0, null);

            projectileManager.draw(canvas);
            timer.draw(canvas);
            canvas.drawText("امتیاز: " + score, width - 160, 50, scorePaint);

            if (paths != null) {
            for (int i = 0; i < paths.size(); i++) {
                canvas.drawPath(paths.valueAt(i), linePaintBlur);
                canvas.drawPath(paths.valueAt(i), linePaint);

                if (paths.valueAt(i).getTimeDrawn() + 500 < System.currentTimeMillis()) {
                paths.removeAt(i);
                }
            }
            }
        }
        }
    }
    } catch(Exception e){
    Log.e("FruitNinja", e.getMessage());
    } finally {
    if (canvas != null) {
        surfaceHolder.unlockCanvasAndPost(canvas);
    }
    }
}

}

public void updateDrawnPath(SparseArrayCompat<TimedPath> paths) {
this.paths = paths;
}

这里我设置了颜色:

canvas.drawARGB(228, 181,117, 0);

并以这种方式设置图像:

  Bitmap board =   BitmapFactory.decodeResource(Resources.getSystem(),R.drawable.bg);
  canvas.drawBitmap(board, 0, 0, null);

但没有结果。 有什么建议吗?

0 个答案:

没有答案