【发布时间】:2011-07-12 20:16:14
【问题描述】:
我在 Android 中有一个绘图应用程序,它允许用户用手指绘图,然后将生成的形状存储为 Android Paths。为了允许用户删除他们绘制的单个Paths,我实现了this solution,它为每个Path 使用边界Rect,然后使用内部多维二进制数组来表示内部的像素边界Rect。然后我通过获取路径的控制点来填充数组,并使用二次贝塞尔曲线的数学方程沿着它进行跟踪,将数组中的每个元素都设置为 1。
使用上述设置,当处于擦除模式时,我首先检查用户手指与边界Rect 之间的碰撞,如果发生碰撞,然后检查用户触摸的像素是否设置为数组中的 1。
现在,当用户加载笔记时,我会将所有形状加载到“笔划”对象的ArrayList 中,这样我就可以轻松地显示它们,并在擦除模式下循环检查它们是否存在碰撞。我还将Rect 和带有笔划的二进制数组存储在自定义对象中。一切都按预期工作,但是存储所有这些数据的内存占用,特别是每个路径边界的二进制数组Rect,变得越来越昂贵,当用户有大量笔划时,我得到一个java.lang.OutOfMemoryError在我的代码部分为每个笔画创建数组。
对实现此目的的更好方法有什么建议吗?本质上,我试图确定两个 Android 路径(绘图路径,然后是用户在擦除模式下创建的路径)之间的冲突,虽然上述方法在理论上可行,但实际上它是不可行的。
谢谢,
保罗
【问题讨论】:
标签: android path collision-detection