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

Мне нужно нарисовать текст на холсте (пользовательского вида), и нужно сначала обрезать его до максимальной ширины, добавив в конце, если нужно, многоточие. Я вижу, вы можете сделать это для 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);