在 Android Canvas 痛苦应用程序中擦除特定路径的实现
Implementation of Erasing a particular path in Android Canvas Pain Application
我正在尝试构建一个基本的 Android Canvas 具有绘画、擦除、突出显示、撤消/重做功能的绘画应用程序。我已将每条路径设为离散路径并维护它们的堆栈以实现 undo/redo 功能。现在我想通过点击一个特定的注释来实现擦除,我需要删除它。我无法检测到用户在哪条路径上进行了触摸。
示例实现应该类似于 samsung galaxy tabs 操作备忘录中的操作备忘录。http://support-us.samsung.com/spsn/detail.jsp?ctg_id=1280&sub_ctg_id=&live_id=&video_id=2942911618001
查看那个
的删除功能
这里的基本问题是命中测试。蛮力方法是存储所有注释,然后为每个注释上的每个坐标检查距离,如果距离小于某个阈值,则命中测试成功。但这效率很高
经过大量研究,我终于用以下方法解决了这个问题:
- 存储所有注释及其抽头点并创建边界
每个盒子 (Read about bounding box)
- 现在,在每次点击时找出那些点击目标位于该注释的边界框中的注释。将这些注释标记为您的候选注释
- 对于每个候选注释,通过检查命中点是否靠近该注释来进行强力测试
我们可以通过使用 convex-hull 而不是边界框
来进一步改进寻找候选项的近似方法
我正在尝试构建一个基本的 Android Canvas 具有绘画、擦除、突出显示、撤消/重做功能的绘画应用程序。我已将每条路径设为离散路径并维护它们的堆栈以实现 undo/redo 功能。现在我想通过点击一个特定的注释来实现擦除,我需要删除它。我无法检测到用户在哪条路径上进行了触摸。
示例实现应该类似于 samsung galaxy tabs 操作备忘录中的操作备忘录。http://support-us.samsung.com/spsn/detail.jsp?ctg_id=1280&sub_ctg_id=&live_id=&video_id=2942911618001 查看那个
的删除功能这里的基本问题是命中测试。蛮力方法是存储所有注释,然后为每个注释上的每个坐标检查距离,如果距离小于某个阈值,则命中测试成功。但这效率很高
经过大量研究,我终于用以下方法解决了这个问题:
- 存储所有注释及其抽头点并创建边界 每个盒子 (Read about bounding box)
- 现在,在每次点击时找出那些点击目标位于该注释的边界框中的注释。将这些注释标记为您的候选注释
- 对于每个候选注释,通过检查命中点是否靠近该注释来进行强力测试
我们可以通过使用 convex-hull 而不是边界框
来进一步改进寻找候选项的近似方法