【问题标题】:why my invoke of Canvas.drawText() just doesn't work为什么我对 Canvas.drawText() 的调用不起作用
【发布时间】:2011-04-30 00:36:48
【问题描述】:

大家好: 我正在编写一个继承自 TextView 的类,并覆盖其 onDraw() 方法,但在该方法中,我对 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);
}

【问题讨论】:

  • @bemace,它有什么作用?这应该在左上角画出你好。它会崩溃吗?它什么都不做吗? textView 的原始行为是否会接管?你是如何在布局中使用 Overridden TextView 的?
  • @Greg - 我刚刚清理了代码格式,user486005 提出了问题

标签: android textview android-canvas ondraw drawtext


【解决方案1】:

各地都提出了很好的建议,伙计们真的很棒。下一次,如果你在评论中询问那个人,或者在发布它作为答案之前,他是否尝试过完全显而易见的事情,那就太好了。你真的认为当他到达一个不工作的点的那一刻,他没有尝试就直接来到 Stack Overflow?

我确实有一个替代建议,这很疯狂的是基于整个问题,而不仅仅是在没有太多实际知识的情况下可以回答的部分。

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

【讨论】:

    【解决方案2】:

    它没有绘制任何东西,因为文本坐标位于左下角。由于您尝试在 0,0 上绘制,因此它将在屏幕上方绘制。

    尝试将最后一行更改为:

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

    【讨论】:

    • @user486005 在测试绘图时,通常最好尝试绘制到已知点,例如 100,100,最初用于调试,然后担心放置。您会意识到您的问题是采用这种方法从屏幕上绘制文本。只是一个想法。
    • 为什么坐标会从左下角开始?它一直在左上角!
    • 至少他们可以在文档中提到这种差异!
    • 对我不起作用,在我的情况下(kotlin),该方法需要浮点值。我放了0f和20f。有什么区别吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2010-10-08
    • 2016-02-27
    • 2019-01-13
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多