Разместить текст по ширине растрового изображения - PullRequest
2 голосов
/ 04 февраля 2012

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

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Да, нет проблем. В вашей функции 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 и текст. Он рисует на объекте canvas центрированный текст «Hello World», для получения дополнительной документации о TextLayouts вы можете использовать документацию по разработке Android;) Комментарий от меня: пример кода не оптимизирован, вы можете настроить Textpaint в любой другой функции, событие Text и maxTextWidth - из-за иногда интенсивного использования события onDraw () лучше поместить код в другой, но не часто используемые функции, такие как конструктор класса или около того.

0 голосов
/ 04 февраля 2012

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

...