Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Подогнать текст к ширине растрового изображения

Автор вопроса: styantonОтветов: 2

Мне нужно нарисовать текст, который заполняет данный Rect() по горизонтали (только пробелы должны быть растянуты). Есть ли способы, кроме подсчета ширины каждого слова?

androidandroid-canvastext

Ответы

Ответ 1 · рейтинг 1 · Andreas

Да нет проблем. В вашей функции 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() лучше поместить код в другую нечасто используемую функцию, такую ​​как конструктор класса или около того.

Ответ 2 · Andreas

Просто попробуйте StaticLayout (для статического текста) или DynamicLayout (динамический текст) в вашей функции onDraw(), это текстовые макеты, которым вы можете задать максимальную ширину. Вы можете использовать это даже с TextUtils.EllipSize, чтобы вырезать текст.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы