文本的Android的画布的drawText y位置(Android canvas drawText

2019-07-29 10:03发布

我使用的是画布来创建一些背景和一些文本的可绘制。 提拉被用作一个EditText内的化合物可绘制。

该文本通过在画布上的drawText()绘制的,但我确实有在某些情况下绘制文本的y位置的问题。 在这些情况下的一些文字部分被切断(见图片链接)。

人物没有定位的问题:

http://i50.tinypic.com/zkpu1l.jpg

与定位的问题人物,文字中包含“G”,“J”,“Q”等:

http://i45.tinypic.com/vrqxja.jpg

你可以找到一个代码片段重现跌破发行。

有哪位高手知道如何确定y位置相应的位置?

public void writeTestBitmap(String text, String fileName) {
   // font size
   float fontSize = new EditText(this.getContext()).getTextSize();
   fontSize+=fontSize*0.2f;
   // paint to write text with
   Paint paint = new Paint(); 
   paint.setStyle(Style.FILL);  
   paint.setColor(Color.DKGRAY);
   paint.setAntiAlias(true);
   paint.setTypeface(Typeface.SERIF);
   paint.setTextSize((int)fontSize);
   // min. rect of text
   Rect textBounds = new Rect();
   paint.getTextBounds(text, 0, text.length(), textBounds);
   // create bitmap for text
   Bitmap bm = Bitmap.createBitmap(textBounds.width(), textBounds.height(), Bitmap.Config.ARGB_8888);
   // canvas
   Canvas canvas = new Canvas(bm);
   canvas.drawARGB(255, 0, 255, 0);// for visualization
   // y = ?
   canvas.drawText(text, 0, textBounds.height(), paint);

   try {
      FileOutputStream out = new FileOutputStream(fileName);
      bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
   } catch (Exception e) {
      e.printStackTrace();
   }
}

Answer 1:

我认为这是可能的假设,textBounds.bottom = 0。对于那些降序字符的错误,这些字符的底部部分是可能低于0(这意味着textBounds.bottom> 0)。 你可能想是这样的:

canvas.drawText(text, 0, textBounds.top, paint); //instead of textBounds.height()

如果您textBounds为+5至-5,以及你在y =身高(10)绘制文本,然后你只看到文字的上半部分。



Answer 2:

我相信,如果你想绘制文本靠近左上角,你应该这样做:

canvas.drawText(text, -textBounds.left, -textBounds.top, paint);

你可以通过累加位移的所需量的两个坐标周围的文本中移动:

canvas.drawText(text, -textBounds.left + yourX, -textBounds.top + yourY, paint);

为什么这个工程(至少对我来说)的原因是,getTextBounds()告诉你在哪里的drawText()将利用在事件x = 0和Y = 0的文本。 所以,你必须通过减去文字采用的是Android处理方式引入的位移(textBounds.left和textBounds.top)抵制这种行为。

在这个回答我更多地讨论这个话题一点。



文章来源: Android canvas drawText y-position of text