Android中canvas.drawText()无法使用\r\n换行的解决方案

来源:互联网 发布:阅读题软件 编辑:程序博客网 时间:2024/05/01 03:55

今天在自定义View的时候使用到了canvas.drawText()来绘制文字,但是出现了使用\r\n和\n都无法换行的问题。百度了一下,发现了网友主要有的解决方案,使用TextPaint.

具体使用如下:

TextPaint textPaint = new TextPaint();//此可以在View的初始化中进行String drawString = "testString";StaticLayout staticLayout = new StaticLayout(drawString,textPaint,canvas.getWidth(),Aligment.ALIGN_NORMAL,1.0F,0.0F,true);canvas.translate(startX,startY);staticLayout.draw(textPaint);

具体可参见网页Draw multi-line text to Canvas

但是这种方式,会提示不能onDraw中声明类,因为onDraw可能会多次调用,这样会比较消耗内存。但是上面那个网页中,也给出了使用canvas解决的方案。由于我们绘制文字的时候一般都会有文字的大小,因此可以使用下面这段代码:

canvas.drawText("Test1",getPaddingLeft() + index * averageWidth, (float) (height- score * 1.0 / maxScore * height / 2 + textSize),paint);canvas.drawText("Test2",getPaddingLeft() + index * averageWidth, (float) (height- score * 1.0 / maxScore * height / 2 - textSize),paint);

上面中的其他参数是自己代码中定位用的参数,可以忽略,换成自己的就行.

但是经过这种测试这种不同行之间有空隙,不是属于完美的换行,需要改进。但是相对于TextPaint来说,个人认为更好一些。



0 0