Измерение ширины текста, который будет нарисован на холсте (Android)


есть ли метод, который возвращает ширину (в пикселях ) текста, который будет нарисован на холсте Android с помощью метода drawText () в соответствии с краской, используемой для его рисования?

6 112

6 ответов:

Paint paint = new Paint();
Rect bounds = new Rect();

int text_height = 0;
int text_width = 0;

paint.setTypeface(Typeface.DEFAULT);// your preference here
paint.setTextSize(25);// have this the same as your text size

String text = "Some random text";

paint.getTextBounds(text, 0, text.length(), bounds);

text_height =  bounds.height();
text_width =  bounds.width();

дополнительный ответ

существует небольшая разница между шириной, возвращаемой Paint.measureText и Paint.getTextBounds. measureText возвращает ширину, которая включает значение advanceX глифа, заполняющее начало и конец строки. Элемент Rect ширина возвращенным getTextBounds не имеет этого заполнения, потому что границы-это Rect что плотно обертывает текст.

источник

Ну я сделал по-другому:

String finalVal ="Hiren Patel";

Paint paint = new Paint();
paint.setTextSize(40);
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
paint.setTypeface(typeface);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);

Rect result = new Rect();
paint.getTextBounds(finalVal, 0, finalVal.length(), result);

Log.i("Text dimensions", "Width: "+result.width()+"-Height: "+result.height());

надеюсь, что это поможет вам.

Я использовал методы measureText () и getTextPath ()+computeBounds () и создал Excel со всеми текстовыми атрибутами для шрифта фиксированного размера, который можно найти в разделе https://github.com/ArminJo/android-blue-display/blob/master/TextWidth.xlsx . Там вы найдете также простые формулы для других текстовых атрибутов, таких как ascend и т. д.

The app а также функция drawFontTest () для генерации необработанных значений, используемых в excel также доступно в этом РЕПО.

вы можете использовать "textPaint.getTextSize ()", чтобы получить ширину текста