适用于极宽画布的Android选项

我一直试图让一个非常大的画布工作几天.

将所有内容添加到画布后,画布的宽度有时为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操作更快.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...