【问题标题】:Centering Text on Android Canvas Including Accurate Bounds在 Android 画布上居中文本,包括准确的边界
【发布时间】:2014-10-30 20:45:51
【问题描述】:

情况是这样的。我正在渲染到画布。没有其他东西被渲染,画布实际上是全屏的。只有一个视图。

我想做一个简单的(文本)按钮。这包括两部分:直观地绘制它,并检查边界以查看它是否被按下。这两件事应该是一致的。

理想情况下,居中是可选的,但我希望切换它很简单。

经过太多小时后,我怀疑这不仅仅是对齐问题,而是问题根源在于 API 的使用。

如何做到这一点?

【问题讨论】:

    标签: android text android-canvas centering


    【解决方案1】:

    只需使用静态布局,即使通过自动对齐文本将大小增加了一些限制,您也可以在画布内保持文本中心对齐。

            Rect bounds = new Rect(x1, y1, x2, y2);// set the bounds
            String textOnCanvas = "text to be wriiten";
            StaticLayout sl = new StaticLayout(textOnCanvas, textPaint,
                    bounds.width(), Layout.Alignment.ALIGN_CENTER, 1, 1, true);
            canvas.save();
            float textHeight = getTextHeight(textOnCanvas, textPaint);
            int numberOfTextLines = sl.getLineCount();
            float textYCoordinate = bounds.exactCenterY() -
                    ((numberOfTextLines * textHeight) / 2);
    
            //text will be drawn from left
            float textXCoordinate = bounds.left;
            canvas.translate(textXCoordinate, textYCoordinate);
            //draws static layout on canvas
            sl.draw(canvas);
            canvas.restore();
    

    静态布局的参数Layout.Alignment.ALIGN_CENTER将负责画布中文本的居中对齐。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2010-11-26
      • 2019-07-26
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      相关资源
      最近更新 更多