手指绘图应用程序无限滚动

时间:2015-04-02 23:17:19

标签: android android-canvas android-bitmap

我想制作带有垂直滚动的手指绘制应用程序,可能还有无限的绘图空间。滚动可以锁定/解锁 我知道有两种方法可以做到:

  • 制作具有指定宽度和高度的位图,通过onTouchEvent(MotionEvent)Canvas(Bitmap)中绘制点/线,并在onDraw(Canvas)中绘制该位图。
  • 将触摸点保存到数组并直接在onDraw(Canvas)
  • 中绘制

但两种方式都有缺点:

  • 带有大位图的OutOfMemoryException。
  • 在滚动和OOM的情况下,很多点都很慢。

我有一个想法是按需使用窗口和位图的读/写区域。所以有一个问题:如何将位图写入/附加到另一个位图?

我无法找到将200x200px位图附加到8000x8000px位图的合适方法。如果没有原生的文件库,有没有办法做到这一点?

或者我完全错了,有一种更简单的方法可以做我需要的事情吗?

1 个答案:

答案 0 :(得分:1)

如何使用小位图网格,而不是将它们附加到更大的位图?当你的一个位图离开屏幕时,你将它保存到磁盘并将其销毁或回收它,有点像GridView如何回收细胞(它重复使用相同的10个细胞左右来显示可能无限的网格细胞)。保存整个图形只是意味着将所有位图保存到磁盘。

这种方法主要关注的是在用户滚动浏览视图时从磁盘保存/加载块所需的时间,这可能会导致应用程序冻结一段时间,但有一些方法可以使其平滑(例如,通过在后台线程中预加载位图。)

在列表中存储触摸点也是完全可能的,有很多方法可以加速绘图部分,例如通过缓存屏幕上的内容并仅绘制用户滚动时缺少的内容。哪一个最好取决于你将在你的观点上画出什么。