Рисовать TextView внутри пользовательской активности? - PullRequest
2 голосов
/ 20 мая 2011

Я реализую пользовательский View, и мне нужно нарисовать в нем какой-то текст. Текст должен помещаться в рамку (поэтому я должен разбить его и подогнать). Из-за этого я подумал, что смогу использовать TextView и нарисовать его внутри своего пользовательского View. Вот что я попробовал:

canvas.drawRoundRect(rect, eventRadius, eventRadius, eventBg);

canvas.save();
canvas.clipRect(rect);
TextView tv = new TextView(getContext());
tv.setText(e.getSummary());
tv.setTextColor(Color.BLACK);
tv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
tv.layout(0, 0, (int) (rect.right - rect.left), (int) (rect.bottom - rect.top));
tv.draw(canvas);
canvas.restore();

Однако ничего не появляется. Я знаю, rect в порядке, потому что первый drawRoundRect работает нормально. Что мне не хватает? Есть ли способ лучше? Может быть, я должен вместо этого расширить ViewGroup? Я не уверен, как это будет работать.

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

Чтобы сделать это без упаковки:

canvas.drawText(yourText, xCoord,YCoord, YourPaint);

сделать это с упаковкой

protected void onDraw(Canvas canvas) {

        TextPaint tp=new TextPaint();
        tp.setARGB(255, 255, 0, 0);
        tp.setTextSize(12);
        StaticLayout sl=new StaticLayout("THIS IS SOME LONGER TEXT",tp,60,Layout.Alignment.ALIGN_NORMAL,1f,0f,true);
        sl.draw(canvas);
        }

http://developer.android.com/reference/android/text/StaticLayout.html

0 голосов
/ 20 мая 2011

Мое текущее решение таково:

TextView textView = new TextView(getContext());
int width = (int) (rect.right - rect.left);
int height = (int) (rect.bottom - rect.top);
textView.layout(0, 0, width, height);
textView.setText(e.getSummary());
Bitmap bitmapText = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvasText = new Canvas(bitmapText);
textView.draw(canvasText);

canvas.drawBitmap(bitmapText, rect.left, rect.top, null);

Это кажется грязным (и несколько неоптимальным), но это работает. Если кто-то не придумает лучшего решения, я отмечу это как принятое через пару дней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...