2012-01-30 3 views
1

У меня есть следующий код для рисования текста.Получение визуализированной высоты текста, которая эквивалентна ширине отображаемого текста, используя paint.measureText

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    Paint paint = new Paint(); 
    paint.setTextSize(400); 
    paint.setColor(Color.WHITE); 
    paint.setAntiAlias(true); 
    paint.setTextAlign(Align.LEFT); 
    paint.setStyle(Style.FILL); 
    String text = "698"; 
    Rect bounds = new Rect(); 
    paint.getTextBounds(text, 0, text.length(), bounds); 

    int textWidth = bounds.width();   
    int textHeight = bounds.height(); 

    Bitmap originalBitmap = Bitmap.createBitmap(textWidth, 
      textHeight, Bitmap.Config.ARGB_8888); 
    Canvas singleUseCanvas = new Canvas(originalBitmap); 
    singleUseCanvas.drawColor(Color.BLUE); 
    singleUseCanvas.drawText(text, 0, textHeight, paint); 
    canvas.drawBitmap(originalBitmap, 0, 0, null); 
} 

Я получаю нежелательный результат, который с правой и нижней стороны обрезается.

enter image description here

избежать правой боковой обрезки, используя

float textWidth = paint.measureText(text); 
Bitmap originalBitmap = Bitmap.createBitmap((int)(textWidth + 0.5), 
       textHeight, Bitmap.Config.ARGB_8888); 

Я получаю следующее улучшение,

enter image description here

же. Мое дно все еще обрезано. Могу ли я узнать, каков правильный способ получения отображаемой высоты текста, что аналогично отображению ширины текста, используя paint.measureText?

ответ

0

Я думаю, что я бы полезно взглянуть на этот пост: Android Paint: .measureText() vs .getTextBounds() Он имеет хороший обзор о проклейки оказанной текста, а также высоты текста, который ваша забота.

Смежные вопросы