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,通过设置圆角半径为背景高度的一半,实现预期的胶囊状圆角效果。 - 背景随文本自适应:
- 用
measureText获取文本的实际宽度,避免固定尺寸导致的适配问题; - 增加内边距参数,让文本和背景之间保留合适空隙,提升视觉舒适度;
- 基于文本尺寸+内边距动态计算背景宽高,确保背景完全包裹文本。
- 用
- 对齐优化:给文本Paint设置
TextAlign.CENTER,配合画布translate,让文本和背景轻松实现居中对齐,无需手动计算复杂偏移量。
效果对比
- 当前效果:黑色文本在固定大小的白色圆形背景上,文本较长时会超出圆形边界,适配性差。
- 预期效果:黑色文本在白色胶囊状圆角矩形背景上,背景宽度随文本长度自动调整,文本居中显示在背景内,视觉效果更协调。
内容的提问来源于stack exchange,提问作者Waqas K
相关产品推荐
相关产品推荐

