无限滚动的手指绘图应用程序
Finger drawing application with unlimited scroll
我想制作具有垂直滚动且可能无限 space 绘制的手指绘制应用程序。滚动可以是 locked/unlocked.
我知道 2 种方法:
- 制作具有给定宽度和高度的位图,通过
Canvas(Bitmap)
在 onTouchEvent(MotionEvent)
中绘制 points/lines,然后在 onDraw(Canvas)
中绘制该位图。
- 将触摸点保存到数组中,直接在
onDraw(Canvas)
中绘制。
但这两种方式都有缺点:
- 大位图出现 OutOfMemoryException。
- 滚动时有很多点非常慢,也可能 OOM。
我想按需使用位图的 window 和 read/write 区域。于是就有了一个问题:如何将write/append位图转换成另一个位图?
例如,我找不到将 200x200px 位图附加到 8000x8000px 位图的合适方法。有没有办法在没有原生库的情况下做到这一点?
或者我完全错了,有更简单的方法来完成我需要做的事情吗?
使用小位图网格,而不将它们附加到更大的位图怎么样?当您的位图之一超出屏幕时,您将其保存到磁盘并销毁它或回收它,有点像 GridView
回收单元格的方式(它重复使用相同的 10 个左右的单元格来显示可能无限的网格细胞)。保存整个绘图意味着将所有位图保存到磁盘。
这种方法的主要问题是当用户滚动浏览视图时从磁盘 save/load 块花费的时间,这可能会导致应用程序短时间冻结,但有一些方法可以使其平滑(例如通过在后台线程中预加载位图)。
在列表中存储触摸点也是完全可能的,有很多方法可以加快绘图部分的速度,例如通过缓存屏幕上的内容并仅绘制用户滚动时丢失的内容。哪一个最好取决于你将在你的视图上绘制什么。
我想制作具有垂直滚动且可能无限 space 绘制的手指绘制应用程序。滚动可以是 locked/unlocked.
我知道 2 种方法:
- 制作具有给定宽度和高度的位图,通过
Canvas(Bitmap)
在onTouchEvent(MotionEvent)
中绘制 points/lines,然后在onDraw(Canvas)
中绘制该位图。 - 将触摸点保存到数组中,直接在
onDraw(Canvas)
中绘制。
但这两种方式都有缺点:
- 大位图出现 OutOfMemoryException。
- 滚动时有很多点非常慢,也可能 OOM。
我想按需使用位图的 window 和 read/write 区域。于是就有了一个问题:如何将write/append位图转换成另一个位图?
例如,我找不到将 200x200px 位图附加到 8000x8000px 位图的合适方法。有没有办法在没有原生库的情况下做到这一点?
或者我完全错了,有更简单的方法来完成我需要做的事情吗?
使用小位图网格,而不将它们附加到更大的位图怎么样?当您的位图之一超出屏幕时,您将其保存到磁盘并销毁它或回收它,有点像 GridView
回收单元格的方式(它重复使用相同的 10 个左右的单元格来显示可能无限的网格细胞)。保存整个绘图意味着将所有位图保存到磁盘。
这种方法的主要问题是当用户滚动浏览视图时从磁盘 save/load 块花费的时间,这可能会导致应用程序短时间冻结,但有一些方法可以使其平滑(例如通过在后台线程中预加载位图)。
在列表中存储触摸点也是完全可能的,有很多方法可以加快绘图部分的速度,例如通过缓存屏幕上的内容并仅绘制用户滚动时丢失的内容。哪一个最好取决于你将在你的视图上绘制什么。