如何在画布上绘制文字?

时间:2010-10-28 04:17:17

标签: android canvas drawable

我正在尝试为Android开发一个简单的饼图类。现在,它可以获取标签和值的映射并绘制饼图。我还没有添加馅饼的图例,这是我需要将文本放在屏幕角落的小矩形附近的地方。任何帮助表示感谢,因为我是Android开发人员的新手。

3 个答案:

答案 0 :(得分:51)

您必须使用Canvas类的drawText方法。

Paint paint = new Paint(); 
canvas.drawPaint(paint); 
paint.setColor(Color.BLACK); 
paint.setTextSize(16); 
canvas.drawText("My Text", x, y, paint); 

以下是相关文档:

http://developer.android.com/reference/android/graphics/Canvas.html#drawText(java.lang.String, float, float, android.graphics.Paint)

答案 1 :(得分:8)

这里曾经有另一个被删除的答案,因为它只是一个链接。原始链接为here。代码基本相同,但我拿出了非文本绘图部分,并且还扩大了尺寸,以便在现代屏幕密度上更好地工作。

这只是展示了一些你可以用文字绘图做的事情。

enter image description here

以下是更新后的代码:

@PublishedApi internal

我想稍后尝试的其他内容是drawing text along a path

另请参阅this fuller answer here,其中包含以下图像。

enter image description here

答案 2 :(得分:1)

在画布上绘制文本的另一种(可以说是更好的)方法是使用StaticLayout。这可以在需要时处理多行文本。

String text = "This is some text.";

TextPaint textPaint = new TextPaint();
textPaint.setAntiAlias(true);
textPaint.setTextSize(16 * getResources().getDisplayMetrics().density);
textPaint.setColor(0xFF000000);

int width = (int) textPaint.measureText(text);
StaticLayout staticLayout = new StaticLayout(text, textPaint, (int) width, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0, false);
staticLayout.draw(canvas);

TextPaintStaticLayout在被用于说明之前就被实例化了。但是,在onDraw中这样做会损害性能。 Here is a better example在自定义视图的上下文中显示它们,这些视图会绘制自己的文本。