Android Path碰撞问题/解决方案

时间:2011-07-12 20:16:15

标签: android path collision-detection

我在Android中有一个绘图应用程序,允许用户用手指绘制,然后将生成的形状存储为Android Path。为了允许用户删除他们绘制的单个Path,我实施了this solution,为每个Rect使用边界Path,然后使用内部多维二进制数组,用于表示边界Rect内的像素。然后我通过获取Path的控制点来填充数组,并使用二次贝塞尔曲线的数学方程跟踪它,将数组中的每个元素设置为下面的像素为1.

使用上面的设置,在擦除模式下,我首先检查用户手指和边界Rect之间的碰撞,如果发生碰撞,我会检查用户是否触摸的像素是在数组中设置为1。

现在,当用户加载一个笔记时,我将所有形状加载到ArrayList'笔画'对象中,这样我就可以轻松地显示它们并在循环时通过它们检查碰撞。我还将Rect和二进制数组与笔画一起存储在自定义对象中。一切都按预期工作,但存储所有这些数据的内存占用量,特别是每个Path的边界Rect的二进制数组,变得越来越昂贵,当用户有大量笔画时,我得到一个{ {1}}我的代码中为每个笔划创建数组的部分。

有关更好方法的任何建议吗?本质上,我试图确定两个Android路径之间的冲突(绘图路径,然后是用户在擦除模式下创建的路径),虽然上述工作在理论上,但在实践中它是不可行的。

谢谢,

1 个答案:

答案 0 :(得分:0)

“二进制数组”的实际表示是什么?我想如果你调整表示来反映你需要存储的实际数据(例如RLE编码位:在这个y从这个x开始,对于z像素),你将能够存储你需要的东西而没有过大的尺寸。

存储一个实际的字节数组,每个像素一个字节,或每8个像素(如果你正在做的那样)就不需要这个用途。

另一种选择是不存储位图,只存储控制点和边界框。如果触摸与边界框相交,则可以从控制点动态计算位图。