【问题标题】:Draw text in a Canvas and multiple lines在 Canvas 和多行中绘制文本
【发布时间】:2015-11-15 05:59:07
【问题描述】:

我是 Canvas 和 Paint 的初学者。我想在 Canvas 中绘制文本,但它可能比原始位图更长。这样文本就从位图出来了。

是否有某种自动管理器可以在到达终点时创建一个新行?还是我应该玩高度和距离?谢谢

【问题讨论】:

  • 如果您不介意使用 Swing,JTextArea 将为您管理多行文本显示。 Canvas 是一个 AWT 重量级对象,与轻量级控件混合起来可能有点棘手。 JTextArea 是轻量级的,它可能会给您带来更少的问题。

标签: java android paint android-canvas


【解决方案1】:

是的,您可以使用 StaticLayoutDynamicLayout 管理此问题

【讨论】:

    【解决方案2】:

    最好的方法是用StaticLayout绘制文本:

    // init StaticLayout for text
    StaticLayout textLayout = new StaticLayout(
      gText, paint, textWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);
    
    // get height of multiline text
    int textHeight = textLayout.getHeight();
    
    // get position of text's top left corner
    float x = (bitmap.getWidth() - textWidth)/2;
    float y = (bitmap.getHeight() - textHeight)/2;
    
    // draw text to the Canvas center
    canvas.save();
    canvas.translate(x, y);
    textLayout.draw(canvas);
    canvas.restore();
    

    请参阅my blogpost 了解更多详情。

    【讨论】:

      【解决方案3】:

      我建议你也看看这里找到的这段代码 sn-p: https://stackoverflow.com/a/15092729/1759409

      因为它会在一定的宽度和高度内管理你的文本的书写,并自动正确地绘制到画布上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-15
        • 2013-03-22
        • 1970-01-01
        • 1970-01-01
        • 2021-03-14
        • 2012-02-26
        • 1970-01-01
        相关资源
        最近更新 更多