在自定义活动中绘制TextView?

时间:2011-05-20 11:20:44

标签: android view canvas

我正在实现自定义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 个答案:

答案 0 :(得分:3)

无需包装即可完成:

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

答案 1 :(得分:0)

我目前的解决方案是:

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);

感觉很脏(有点不理想),但它有效。如果有人没有提出更好的解决方案,我会在几天内将其标记为已被接受。