我需要在2个连续的位图上绘制文本,形成一个连续的位图。
我可以使用第二个位图上的负偏移量将文本全部绘制两次
//first bitmap
canvas1.drawText(text, position, top, paint);
//second bitmap
canvas2.drawText(text, -lengthOfTextOnFirstBitmap, top, paint);
似乎解决问题的方法不对,我想支持 n 位图,我正在寻找更好的解决方案。
有什么想法吗?
答案 0 :(得分:1)
只需翻译画布,以便在同一“位置”绘制,但画布位于第一个画布的右侧。这应该是一个像素完美的文本渲染。
//first bitmap
canvas1.drawText(text, position, top, paint);
//second bitmap
canvas2.translate(width_of_1st_bitmap, 0);
canvas2.drawText(text, position, top, paint);
canvas2.translate(-width_of_1st_bitmap, 0);
答案 1 :(得分:0)
答案是否定的。您无法使用drawText
部分绘制一个位图,然后再绘制另一个位图。 drawText
是一个单一的原子方法调用,可以在Canvas
的单个实例上执行。并且您无法在drawText
调用过程中切换画布的位图。
但也有其他选择。如果你要同时在内存中有Bitmap1
和Bitmap2
,并且你没有寻找任何分层效果(xFermode绘图)那么你可以只使用一个Bitmap然后得到其中有两个位图。
但是如果您要绘制2位图以避免OutOfMemory错误,那么您可以执行以下操作。
setBitmap()
切换位图。Canvas
中的任何绘制操作都是原子的。因此,您需要将drawText(text)
拆分为两个,然后在第一个位图中绘制一个而在第二个位图中绘制另一个,而不是使用单个text
。您可以使用Paint.getTextBounds()
或Paint.measureText()
了解如何拆分text
。但这真的很乱,你需要计算很多东西。drawText
是一个非常快速的电话。即使用大文本称呼它10次也不会花费太多时间。所以我根本不认为你需要所有这些优化。但是,如果您要使用' drawText'然后' drawCircle'然后' drawRect' (多个绘制调用),然后您可以在Picture中记录这些调用。然后,您可以通过切换位图在“画布”上播放此图片。这将减少方法开销时间。