Intereting Posts
Насколько хорошо поддерживается чувствительность к давлению на устройствах Android? Должен ли я проверить, если ProgressBar isShowing, прежде чем отклонить его? Тестирование Android-модуля с помощью дооснащения и моккита Как определить, способно ли устройство звонить и отправлять сообщения Отчет о сбоях Android Как настроить эмулятор Android для Kindle Fire? Android NumberPicker с Formatter не форматируется при первом рендеринге Как применить стиль ко всем кнопкам приложения для Android Как возобновить работу, а не перезапускать при переходе из панели действий Пользовательский стиль поиска в Android с использованием изображений с девятью патчами Камера для предварительного просмотра камеры для камеры Простой SSH подключается к JSch Как реализовать NestedScrolling на Android? Android Studio 2.2 не упаковывает стороннюю библиотеку в apk Использование COLLATE в Android SQLite – локали игнорируются в инструкции LIKE

Как 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. Вы можете отменить комментарий последней строки, чтобы нарисовать прямоугольник вокруг вашего холста для отладки.