Измерение ширины текста, который будет нарисован на холсте (Android)
есть ли метод, который возвращает ширину (в пикселях ) текста, который будет нарисован на холсте Android с помощью метода drawText () в соответствии с краской, используемой для его рисования?
6 ответов:
вы смотрели android.графика.Краска.measureText (строка txt)?
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 также доступно в этом РЕПО.