2010-10-25 65 views
6

大家好:我正在写一个继承自TextView的类,并覆盖它的onDraw()方法,但在该方法中,我调用的canvas.drawText()没有似乎有效,代码如下:为什么我调用Canvas.drawText()只是不工作

protected void onDraw(Canvas canvas) { 
    // super.onDraw(canvas); 
    Paint paint = new Paint(); 
    paint.setColor(android.graphics.Color.WHITE); 
    paint.setTextSize(20); 

    String text = "hello"; 
    canvas.drawText(text, 0, 0, paint); 
} 
+0

@bemace,它有什么作用?这应该在左上角画出你好。它会崩溃吗?它没有做任何事情吗? textView的原始行为是否接管?你如何在布局中使用重写的TextView? – 2010-10-25 06:04:05

+0

@Greg - 我刚刚清理了代码格式,user486005提出了问题 – 2010-10-25 16:39:27

回答

18

它没有绘图,因为文本坐标是左下角。由于您试图在0,0上绘制,它将在屏幕上方绘制。

尝试改变最后一行:

canvas.drawText(text, 0, 20, paint); 
+0

@ user486005在测试绘图时,最好先尝试绘制已知点(如100,100)以便调试,然后担心放置。你会意识到你的问题是采用这种方法在屏幕上绘制文本。只是一个想法。 – 2012-10-17 16:47:17

+3

为什么世界上的坐标是从左下角开始的?它一直是左上角! – 2013-02-14 14:10:01

+0

至少他们可以在文档中提到这种差异! – 2013-02-14 14:11:33

-1

很好的建议各地,伟大的工作家伙还真。下一次,如果你在评论中询问这个人或者是否在完全显而易见的时候尝试了这个问题,那么这个问题会很好。你真的认为第二个他得到了一个没有工作的点,他只是直接进入Stack Overflow而没有做实验?

我确实有一个备选建议,它足够疯狂地基于整个问题,而不仅仅是没有太多实际知识的情况下可以回答的部分。

我会建议您在Canvas上尝试您的drawText调用,而不是在TextView子类中,因为它不会被TextView中的几百行代码覆盖,从而管理它的可绘制状态。

相关问题