【发布时间】:2012-07-05 17:03:20
【问题描述】:
我有一个SurfaceView,我在其中绘制一个矩阵(游戏板),矩阵的每个单元格的高度和宽度均为 40 像素。
在这些单元格中,我必须存储一个类似于 Scrabble 的图块:
+---------+
| # |
| # # |
| # # |
| ##### |
| # # |
| 17|
+---------+
字母始终为单个字母,数字始终为数字,最多两位数。
为了做到这一点,我实际上已经计算了单元格左上角像素在我的表面上的位置,我想做的是将字母和数字绘制成特定的规范。
我需要确保数字适合给定区域(例如右下角的 10x10 单元格),并且字母在图块中居中,不会侵犯数字区域。
我目前计划使用Paint.getTextBounds() 来计算最大字母和数字的大小,如果发现大小太大,我会简单地用较小的字体。
当然,我愿意接受有关更好方法的建议。即使没有更好的办法,我还是有问题。
我设置绘画对象的方式是:
numPaint = new Paint();
numPaint.setStrokeWidth(1);
numPaint.setColor(Color.BLACK);
而文字的实际绘制很简单:
canvas.drawText(Integer.toString(num), pixcol + 30, pixrow + 30, numPaint);
确实按预期将数字放在单元格的右下角,但我从未指定字体大小或任何其他可能阻止文本超出单元格的内容例如,如果它最终大小为 15x15。
这似乎完全靠运气。无论如何,我已经以完全相同的方式设置了alphaPaint 对象,但我希望它更大一点。
对不起,我只是想确保所有细节都在那里。底线问题是:我们如何设置绘画对象的字体大小?该对象具有getFontMetrics(),但似乎没有set... 等效项。 setTypeface() 最初看起来很有希望,但字体和粗体/斜体/等,没有提到强制特定大小。
【问题讨论】:
标签: android surfaceview paint font-size