Android文本转Bitmap仅显示部分内容的问题排查与解决
文本转Bitmap时仅显示部分文本的问题排查与解决
你遇到的部分文本被裁切的问题,核心原因是文本对齐方式和绘制坐标不匹配导致的,咱们一步步来分析和修复:
问题根源
你的代码里设置了 paint.setTextAlign(Paint.Align.CENTER),这意味着绘制文本时会以你指定的x坐标为中心来对齐文本。但你调用 canvas.drawText(text, 0, baseline, paint) 时把x坐标设为了0,这就会让文本以(0, baseline)这个点为中心绘制——结果就是文本的左半部分会超出Bitmap的左边界(x<0的区域),自然就被裁切了。
另外,虽然你通过 paint.measureText(text) 计算了文本的总宽度,但因为对齐方式的问题,绘制位置不对,导致宽度计算的结果没有被合理利用。
修复方案
只需要调整绘制文本时的x坐标,让它指向Bitmap的水平中心位置即可,这样居中对齐的文本就能完整显示在Bitmap范围内。
修正后的完整代码:
public Bitmap textAsBitmap(String text, float textSize) { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setTextSize(textSize); paint.setColor(Color.BLACK); paint.setStyle(Paint.Style.FILL_AND_STROKE); paint.setTextAlign(Paint.Align.CENTER); // 保持居中对齐 float baseline = -paint.ascent(); // ascent() 是负数,baseline是文本基线到顶部的距离 int width = (int) (paint.measureText(text) + 0.5f); // 四舍五入取整 int height = (int) (baseline + paint.descent() + 0.5f); Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(image); // 修改x坐标为Bitmap宽度的一半,让文本居中绘制 canvas.drawText(text, width / 2f, baseline, paint); return image; }
额外说明
如果你不需要文本居中显示,也可以把 paint.setTextAlign(Paint.Align.LEFT),同时保持 canvas.drawText(text, 0, baseline, paint) 不变,这样文本会从Bitmap的左边界开始绘制,也能完整显示。
内容的提问来源于stack exchange,提问作者Usman Saeed
相关产品推荐
相关产品推荐

