You need to enable JavaScript to run this app. 在Android Studio/JavaScript中如何将Canvas填充色背景替换为图片背景
优惠活动
大模型
产品
解决方案
定价
更多

在Android Studio/JavaScript中如何将Canvas填充色背景替换为图片背景

Canvas 背景色替换为图片填充方案

操作步骤

  • 提前在draw()方法外部初始化适配尺寸的背景位图,避免重复加载导致性能损耗,可在onSurfaceCreated等Surface初始化完成的回调中执行初始化逻辑:
// 类内声明背景位图全局变量
private Bitmap bgBitmap;

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // 获取Surface实际宽高
    int canvasWidth = getWidth();
    int canvasHeight = getHeight();
    // 解码drawable资源中的背景图,将R.drawable.bg_canvas替换为你的背景图资源名
    Bitmap originBg = BitmapFactory.decodeResource(getResources(), R.drawable.bg_canvas);
    // 缩放为与Canvas尺寸匹配的位图
    bgBitmap = Bitmap.createScaledBitmap(originBg, canvasWidth, canvasHeight, true);
    // 回收原始位图释放内存
    originBg.recycle();
}
  • 替换原有背景色绘制逻辑,将你标注的canvas.drawColor(Color.argb(255, 26, 128, 182));行替换为背景位图绘制代码,修改后的draw()方法示例:
private void draw(){
    if (ourHolder.getSurface().isValid()) {
        canvas= ourHolder.lockCanvas();
        // 替换原纯色背景绘制,绘制背景图,0,0为左上角起始坐标
        canvas.drawBitmap(bgBitmap, 0, 0, paint);
        paint.setColor(Color.argb(255, 231, 172, 104));
        canvas.drawBitmap(playerShip.getBitmap(), playerShip.getX(), ScreenY - playerShip.getHeight(), paint);
        for(int i = 0; i < numInvaders; i++) {
            if (invaders[i].getVisibility()) {
                if (uhOroh) {
                    canvas.drawBitmap(invaders[i].getBitmap(), invaders[i].getX(), invaders[i].getY(), paint);
                } else {
                    canvas.drawBitmap(invaders[i].getBitmap2(), invaders[i].getX(), invaders[i].getY(), paint);
                }
            }
        }
        // 请确保原有代码存在画布提交逻辑,如遗漏请补充
        ourHolder.unlockCanvasAndPost(canvas);
    }
}

注意事项

  • 需确保背景位图缩放尺寸和Canvas实际宽高一致,避免出现拉伸、留白、显示不全问题
  • 禁止在draw()方法中执行位图解码操作,draw()方法调用频率极高,重复解码会导致帧率大幅下降、内存抖动
  • 若背景图存在透明通道,可保留原drawColor行先清空画布,再绘制背景图,避免上一帧画面残留

内容的提问来源于stack exchange,提问作者Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 22:27:01