Мне нужно нарисовать текст, который заполняет данный Rect() по горизонтали (только пробелы должны быть растянуты). Есть ли способы, кроме подсчета ширины каждого слова?
Подогнать текст к ширине растрового изображения
Ответы (2)
Да нет проблем. В вашей функции onDraw(Canvas c) используйте следующий код:
public void onDraw(Canvas canvas) {
TextPaint mTextpaint = new TextPaint();
mTextPaint.setAntiAlias(true);
mTextPaint.setTextSize(14);
mTextpaint.setColor(Color.MAGENTA);
final String mText = "Hello World";
final int maxTextWidth = 40;
DynamicLayout dl = new DynamicLayout(mText, mTextPaint,
maxTextWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 1.0f, false);
canvas.translate(0, 100);
dl.draw(canvas);
}
В этом примере создается TextLayout (DynamicLayout), которому задана максимальная ширина, настроенный TextPaint и текст. Он рисует на объекте холста центрированный текст «Hello World», для получения дополнительной документации о TextLayouts вы можете использовать документацию по разработке Android;) Комментарий от меня: код примера не оптимизирован, вы можете настроить Textpaint в любой другой функции, событии Text и maxTextWidth - из-за частого использования события onDraw() лучше поместить код в другую нечасто используемую функцию, такую как конструктор класса или около того.
Просто попробуйте StaticLayout (для статического текста) или DynamicLayout (динамический текст) в вашей функции onDraw(), это текстовые макеты, которым вы можете задать максимальную ширину. Вы можете использовать это даже с TextUtils.EllipSize, чтобы вырезать текст.