为什么画布上的位图显示在背景可绘制的下方?

时间:2011-10-23 02:52:24

标签: android canvas surfaceview

我有SurfaceView我正在设置背景颜色和图像:

BitmapDrawable tiledBackground = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.background));
tiledBackground.setTileModeX(Shader.TileMode.REPEAT);
tiledBackground.setColorFilter(0xaacceeff, PorterDuff.Mode.DST_OVER);
this.setBackgroundDrawable(tiledBackground);

我还有一个动画线程,我正在绘制一个图像(连续调整其x坐标,使其看起来向左移动)。背景图像是透明的PNG,因此它的某些部分是透明的。看来,我从线程中绘制的图像在SurfaceView上的背景可用下面 。我怎样才能让它出现在背景之上?我正在绘制图像:

private void doDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);
    canvas.drawBitmap(missile, x, getHeight() - 95, paint);
    canvas.restore();
}

missilepaint在线程的构造函数中初始化为:

missile = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.missile));
paint = new Paint();

1 个答案:

答案 0 :(得分:2)

每次调用doDraw都应绘制您想要显示的所有内容,包括背景。

// Add to initializer
tiledBackground = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.background));
tiledBackground.setTileModeX(Shader.TileMode.REPEAT);
tiledBackground.setColorFilter(0xaacceeff, PorterDuff.Mode.DST_OVER);

private void doDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);
    // Create a rectangle (just holds top/bottom/left/right info)
    Rect drawRect = new Rect(); 

    // Populate the rectangle that we just created with the drawing area of the canvas.
    canvas.getClipBounds(drawRect);

    // Make the height of the background drawing area equal to the height of the background bitmap
    drawRect.bottom = drawRect.top + tiledBackground.getBitmap().getHeight();

    // Set the drawing area for the background.
    tiledBackground.setBounds(drawRect);

    tiledBackground.draw(canvas);
    canvas.drawBitmap(missile, x, getHeight() - 95, paint);
    canvas.restore();
}