如何在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
相关产品推荐
相关产品推荐

