【问题标题】:How to implement a 'dynamic' drag and drop (like iOS/Android)?如何实现“动态”拖放(如 iOS/Android)?
【发布时间】:2018-02-05 14:39:08
【问题描述】:

我想在列表中实现“动态”拖放。通过“动态”,我的意思是在发生拖动的列表中,拖动元素下方有一个空白区域,当您拖动列表时“跟随它”(以便在视觉上明显地看到拖放元素最终会在名单)。就像您在支持 D&D 的 iOS/Android 应用程序中看到的一样。

我尝试的是使用 Component.dragEnter 在拖动的组件下方插入一个具有拖动元素大小的空组件。随着拖动在列表中移动,删除旧组件并在新位置插入一个新组件(解释为什么我在下一段中创建一个新组件)。但是,由于 CN1 在拖动时进行的动态更新,以及在移动空组件时我自己的更新,我只是找不到让它工作的方法,所以我得到了正确的正常行为。使这比您最初想象的更复杂的一个方面是 CN1 对拖放的内置支持使原始拖动的组件使用 setVisible(false) 不可见,这意味着它留下了一个空白空间。

我重新创建一个新的空组件的原因是因为最终的 drop() 将发生在空组件上,而我实现这项工作的技巧是覆盖空组件上的 drop() 以在 dropTarget 上调用 drop (was) 在组件的位置。

总而言之,我已经花了我不知道多少天试图让这个工作到目前为止没有成功。让我知道是否有人对更直接的方法有建议?

提前致谢!

【问题讨论】:

    标签: drag-and-drop codenameone


    【解决方案1】:

    内置支持隐藏原始组件,但拖动它的图像,您可以通过覆盖 getDragImage() 来自定义它。

    您可以使用自定义代码通过使用拖动侦听器来突出显示放置位置,这可以通过使用addDragOverListener(ActionListener) 来完成。

    【讨论】:

    • 谢谢,我知道这部分API,但我不明白它如何帮助实现拖动项下方的“空白”空间的效果。这个视频展示了我想要实现的效果:youtube.com/watch?v=BoTUAgPZE8w。我认为在 CN1 中必须有某种方法可以做到这一点,我只需要指出正确的方向 :-)
    • 只需添加一个空白组件,该组件的首选尺寸将下降。然后重新验证。准备好后,您可以使用 replace 将组件插入该位置。
    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2012-03-31
    • 2012-07-03
    相关资源
    最近更新 更多