在绘制文字时,如果绘制内容的实际长度大于View的宽度,那么字符将在一行绘制,超出部分不显示。由于绘制函数onDraw没有对换行做逻辑处理,所以超出屏幕的部分便不可见了。如果还是想使用Canvas.drawText函数,那么需要对字符串做换行判断,然后分别绘制各行的字符串。看到一个简单的可行性方法,在此贴出代码:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); TextPaint textPaint = new TextPaint(); textPaint.setARGB(0xFF, 0, 0, 0); textPaint.setTextSize(14.0F); String aboutTheGame = "ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD"; StaticLayout layout = new StaticLayout(aboutTheGame, textPaint, getWindowManager().getDefaultDisplay().getWidth() - 4, Alignment.ALIGN_NORMAL, 1.0F, 0.0F, true); canvas.translate(2, 0); layout.draw(canvas); DynamicLayout dynamicLayout = new DynamicLayout(aboutTheGame, textPaint, getWindowManager().getDefaultDisplay().getWidth() - 4, Alignment.ALIGN_NORMAL, 1.0F, 0.0F, true); canvas.translate(2, 80); dynamicLayout.draw(canvas); }
?说明:
- 此方法可以简单实现换行,但是效果有点瑕疵,尤其中文字符串;
- 主要是利用StaticLayout或者DynamicLayout的draw方法来完成换行操作;
多说一句:如果想深入一点了解这个问题,还是看源码来的快!:)
?
?