如何让用户在Android中任意长的画布上绘画?

时间:2019-03-27 09:32:07

标签: android canvas paint android-bitmap

我想创建一个Android笔记应用程序,用户可以用手指在上面写笔记,在页面满时向上滚动以打开更多空间,在上面书写更多,然后继续滚动,使文档更长,并根据需要随意涂鸦。

如果使用位图(文档的长度不断扩大),电话将很快耗尽内存。

我该怎么做?我是否应该考虑使用某种位图缓存的多个位图,在用户上下滚动时将位图移入和移出?一些Android功能,例如Recycler视图或其他功能?

恐怕我无法很好地解决问题,无法提出解决方案。我只需要指出正确的大致方向。

谢谢

约翰

1 个答案:

答案 0 :(得分:0)

您应该加载指定大小的位图并将其加载到画布上,然后可以使用事件侦听器进行绘制。

int width = WIDTH_IN_PIXELS, height = HEIGHT_IN_PIXELS;

Bitmap.Config config = Bitmap.Config.ARGB_8888; 
Bitmap bitmap = Bitmap.createBitmap(width, height, config); 

Canvas canvas = new Canvas(bitmap);

ARGB_8888在单个像素上存储4个字节。因此,大约2000 * 2000的图像会利用

  

2000 * 2000 = 40,00,000像素

所以总字节为40,00,000 * 4 =

  

1,60,00,000字节

因此,以MB为单位的 16MB 不会达到MemoryOut。

因此,您可以做的是在recyclerview上加载较大画布的缩放后的(320 * 320,仅需要400KB)版本,就像instagram的feed一样,那里将不会使用太多内存,因为滚动时,视图将被回收。

当用户单击特定项目时,您可以将完整的位图放在另一个活动上,以便易于处理,并且用户可以编辑现有的位图并保存。