android - 为什么我在 Canvas 上的位图出现在背景可绘制对象下方?

标签 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();

最佳答案

每次调用 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();
}

关于android - 为什么我在 Canvas 上的位图出现在背景可绘制对象下方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7864040/

相关文章:

android - 在哪里获取 android 中微调器的国家/地区列表

android - 类路径中的某些运行时 JAR 文件具有不兼容的版本。考虑从类路径中删除它们

javascript - 保存带有背景图像的 Canvas

javascript - 对选定文件进行 Canvas 旋转和调整大小操作时,加载程序图像不显示

java - 自定义相机在启动时崩溃应用程序

android - 使用媒体播放器播放视频时 SurfaceView 空白

android - 带有顶栏、底栏和剩余空间内容 View 的布局

android - 使用 HttpURLConnection 向服务器发送请求时缺少参数

javascript - 是否有 paper.js 选项可以在填充下绘制路径描边?

android - Mediaplayer 有时不起作用