我一直试图让一个非常大的画布工作几天.
将所有内容添加到画布后,画布的宽度有时为30,000,但如果将此代码添加到ondraw方法,则滚动浏览变得非常慢.
然后我尝试将所有内容添加到位图,然后在onDraw方法中绘制位图.虽然这对于较小的位图工作正常,但是对于30,000宽的位图,我的内存错误.
谢谢
编辑我也尝试将位图更改为Config.RGB_565但我仍然得到内存错误.
解决方法:
您在ArrayList中有多少条目,它看起来非常大.
根据我的理解,你在onDraw()中绘制所有内容时没有OoM问题,但它真的很慢?如果是这种情况,最可能的原因是你正在调用大量的drawText,这非常慢,基本上如果你有10000个字符串要绘制,系统将不得不测量它们中的每一个以便确定给定的String是否在大画布上可见,然后实际的绘图部分也很慢.
您可以测试绘制所有文本所花费的时间,并查看是否是这种情况.
如果确实如此,那么最简单的方法是将每个字符/数字映射到位图,您可以让艺术家创建PNG文件,或者在onCreate(Bundle)或其他一些名称中绘制您需要的每个唯一字符. -once-per-Activity-creation方法,将位图放在String-to-Bitmap HashMap中,而不是调用
canvas.drawText(bellNumber, xPad, mOriginY, paint);
你打电话的东西
canvas.drawBitmap(hash.get(bellNumber), src, dst, paint); //remember to reuse src & dst
这将完全绕过String相关的绘图开销,并且应该使您的onDraw操作更快.