Intereting Posts
Свойство match_parent для детей в RelativeLayout Динамическая настройка содержимого и макета виджета до размера, определяемого пользователем путем изменения размера. Android Принудительное видео для открытия приложения Youtube на Android Отмена текущего соединения при нажатии пользователем Как сказать Proguard обфускации имен классов Как использовать пользователей facebook для тестирования с Android Как остановить HttpURLConnection.getInputStream ()? Консоль моей Android-студии не печатает сообщение журнала Как поместить все изображение на экран в качестве обоев Как протестировать приложение Android в конфигурации Galaxy S4 с помощью эмулятора? Изменение цвета фона в BottomNavigationView Откройте видеоролик Chromecast YouTube из моего приложения для Android Заставка экрана при загрузке url в webview в приложении для Android LinearLayout с разделителями на pre Honeycomb Невозможно добавить buildConfigField в productFlavors

Нарисовать текст «эллипсисом» на холст

Мне нужно нарисовать текст на холсте (пользовательского вида), и нужно сначала обрезать его до максимальной ширины, добавив в конце, если нужно, многоточие. Я вижу, вы можете сделать это для TextView, но я хочу сделать это внутри пользовательского вида onDraw () без необходимости добавления дочернего представления.

Это возможно? Я знаю, что могу измерить строку, отрубить персонажа, снова измерить и т. Д., Пока он не станет подходящим размером …. и я уверен, что есть более эффективные способы … но я бы хотел избежать повторного использования Это колесо, если можно.

Solutions Collecting From Web of "Нарисовать текст «эллипсисом» на холст"

Взгляните на TextUtils.ellipsize() . Я думаю, это именно то, что вы хотите. В основном вы просто говорите, сколько свободного места и используя другую информацию о состоянии, оно создаст для вас правильный текст. 🙂

Вот пример:

 TextPaint textPaint = new TextPaint();//The Paint that will draw the text textPaint.setColor(Color.WHITE);//Change the color if your background is white! textPaint.setStyle(Paint.Style.FILL); textPaint.setAntiAlias(true); textPaint.setTextSize(20); textPaint.setTextAlign(Paint.Align.LEFT); textPaint.setLinearText(true); Rect b = getBounds(); //The dimensions of your canvas int x0 = 5; //add some space on the left. You may use 0 int y0 = 20; //At least 20 to see your text int width = b.getWidth() - 10; //10 to keep some space on the right for the "..." CharSequence txt = TextUtils.ellipsize("The text", textPaint, width, TextUtils.TruncateAt.END); canvas.drawText(txt, 0, txt.length(), x0, y0, textPaint);