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

Android Java中如何用Paint和Canvas绘制适配文本的圆角矩形背景

解决Paint绘制适配文本的圆角矩形背景问题

针对你遇到的两个问题,直接上修改后的代码和关键说明:

修改后的完整代码

Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(500, 280, conf);
Canvas canvas1 = new Canvas(bmp);

Paint textPaint = new Paint();
textPaint.setTextSize(30);
textPaint.setColor(Color.BLACK);
textPaint.setTextAlign(Paint.Align.CENTER); // 设置文本居中对齐,简化绘制逻辑

Paint bgPaint = new Paint();
bgPaint.setColor(Color.WHITE);

// 生成目标文本
String text = new Random().nextInt() + " $";

// 1. 计算文本实际宽度,为背景尺寸做准备
float textWidth = textPaint.measureText(text);
// 定义背景内边距,避免文本紧贴背景边缘
float horizontalPadding = 20;
float verticalPadding = 10;
// 计算圆角矩形的宽高:文本尺寸+两倍内边距
float bgWidth = textWidth + 2 * horizontalPadding;
float bgHeight = textPaint.getTextSize() + 2 * verticalPadding;
// 圆角半径设为背景高度的一半,实现胶囊状效果
float radius = bgHeight / 2;

// 2. 调整画布位置,让整体在目标区域居中
float targetX = 200 / 2f;
float targetY = 100 / 2f;
canvas1.translate(targetX, targetY);

// 3. 绘制圆角矩形背景:以translate后的原点为中心,向左上/右下偏移一半宽高
canvas1.drawRoundRect(-bgWidth/2, -bgHeight/2, bgWidth/2, bgHeight/2, radius, radius, bgPaint);

// 4. 绘制文本,因设置了居中对齐,直接在原点位置绘制即可
canvas1.drawText(text, 0, 0, textPaint);

关键修改点说明

  • 替换圆形为圆角矩形:用drawRoundRect替代drawCircle,通过设置圆角半径为背景高度的一半,实现预期的胶囊状圆角效果。
  • 背景随文本自适应:
    1. 用measureText获取文本的实际宽度,避免固定尺寸导致的适配问题;
    2. 增加内边距参数,让文本和背景之间保留合适空隙,提升视觉舒适度;
    3. 基于文本尺寸+内边距动态计算背景宽高,确保背景完全包裹文本。
  • 对齐优化:给文本Paint设置TextAlign.CENTER,配合画布translate,让文本和背景轻松实现居中对齐,无需手动计算复杂偏移量。

效果对比

  • 当前效果:黑色文本在固定大小的白色圆形背景上,文本较长时会超出圆形边界,适配性差。
  • 预期效果:黑色文本在白色胶囊状圆角矩形背景上,背景宽度随文本长度自动调整,文本居中显示在背景内,视觉效果更协调。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:38