Intereting Posts
Интеграция WeChat в мое приложение для Android для входа в систему Как сохранить положительные / отрицательные кнопки DialogFragment над мягкой клавиатурой Android – извлечение массива строк из ресурсов Обновление проекта Gradle завершилось неудачей после обновления Android Studio Какова эквивалентность iOS для Android RelativeLayout / LinearLayout? Клиент Microsoft OData Client Xamarin не работает Отображать изображения на Android с помощью TextView и Html.ImageGetter асинхронно? Есть ли способ запустить приложение сразу после установки с помощью некоторого «вспомогательного приложения»? Android make? Attr / selectableItemBackgroundBorderless go дальше? Android: как получить текущий день недели (понедельник и т. Д.) На языке пользователя? Не удается установить пакет Android Studio Bundle? «Невозможно повысить сообщение об ошибке» ScrollView сражается со свитком TimePicker, Timepicker не прокручивается в результате Android Загрузить Zip на SD-карту? Добавление библиотек поддержки v7, v13 с помощью gradle не работает Отключение android CoordinatorLayout прокрутки поведения

Как Canvas.drawText () действительно рисует текст?

В этой документации метода написано, что:

x The x-coordinate of origin for where to draw the text y The y-coordinate of origin for where to draw the text 

Но он ничего не говорит о направлении, которое этот текст нарисован. Я знаю, что текст извлекается из источника вверх, но когда я даю следующие аргументы, мой текст обрезается:

 canvas.drawText(displayText, 0, canvas.getHeight(), textPaint); 

Кроме того, предположим, что я использую Align.LEFT (это означает, что текст рисуется справа от x, y origin)

Итак, каковы правильные аргументы (при условии, что я не хочу использовать фиксированные числа)?

Возможно, вы можете использовать следующий фрагмент, чтобы узнать, работает ли он или нет:

 int width = this.getMeasuredWidth()/2; int height = this.getMeasuredHeight()/2; textPaint.setTextAlign(Align.LEFT); canvas.drawText(displayText, width, height, textPaint); 

Ширина и высота вычисляются произвольно в моем случае.

Это то, что я в конечном итоге использовал:

 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (textAlignment == Align.CENTER) { canvas.drawText(displayText, canvas.getWidth()/2, canvas.getHeight()-TEXT_PADDING, textPaint); } else if (textAlignment == Align.RIGHT) { canvas.drawText(displayText, canvas.getWidth()-TEXT_PADDING, canvas.getHeight()-TEXT_PADDING, textPaint); } else if (textAlignment == Align.LEFT) { canvas.drawText(displayText, TEXT_PADDING, canvas.getHeight()-TEXT_PADDING, textPaint); } //canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), p); } 

Два комментария:

  1. TEXT_PADDING – это измерение dp, которое я конвертирую в пиксели во время выполнения (в моем случае 3dp).
  2. Вы можете отменить комментарий последней строки, чтобы нарисовать прямоугольник вокруг вашего холста для отладки.