You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Canvas中绘制带黑白透明背景的矩形?

实现黑白透明背景的矩形

你的代码存在两个关键问题:

  • drawRect 参数顺序错误:Android 中 canvas.drawRect(left, top, right, bottom) 要求 left < right 且 top < bottom,你传入的 400, 180, 80, 350 不符合规则,会导致矩形无法正确绘制。
  • 当前仅设置单一颜色填充,无法实现黑白相间的透明背景效果。

以下是实现目标效果的修正代码:

private void drawRectangle() {
    // 创建用于绘制最终效果的Bitmap
    Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);

    Paint paint = new Paint();
    paint.setStyle(Paint.Style.FILL);
    
    // 生成棋盘格单元Bitmap
    int tileSize = 20;
    Bitmap tileBitmap = Bitmap.createBitmap(tileSize * 2, tileSize * 2, Bitmap.Config.ARGB_8888);
    Canvas tileCanvas = new Canvas(tileBitmap);
    Paint tilePaint = new Paint();
    
    // 绘制白色方块
    tilePaint.setColor(Color.WHITE);
    tileCanvas.drawRect(0, 0, tileSize, tileSize, tilePaint);
    tileCanvas.drawRect(tileSize, tileSize, tileSize * 2, tileSize * 2, tilePaint);
    
    // 绘制半透明黑色方块
    tilePaint.setColor(Color.parseColor("#80000000"));
    tileCanvas.drawRect(0, tileSize, tileSize, tileSize * 2, tilePaint);
    tileCanvas.drawRect(tileSize, 0, tileSize * 2, tileSize, tilePaint);
    
    // 设置平铺Shader
    BitmapShader shader = new BitmapShader(tileBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
    paint.setShader(shader);

    // 修正参数顺序,绘制有效矩形区域
    canvas.drawRect(80, 180, 400, 350, paint);
}

代码说明:

  • 棋盘格Shader:通过2x2的小Bitmap单元交替绘制白色和半透明黑色,再用BitmapShader实现平铺,模拟黑白透明背景。
  • 参数修正:调整drawRect参数顺序,确保矩形区域有效可显示。
  • 透明度调整:你可以修改颜色值#80000000的前两位(00-FF),调整黑色方块的透明程度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:06:31