1

我正在尝试实现拖放功能。我的 UI 布局如下所示:

 --- --- ---
| 1 | 2 |   |
 --- ---  5 |
| 3 | 4 |   |
 --- --- ---

框 1、2、3 和 4 是图像,当用户选择时,框周围会有一个白色边框。此选择操作使用 执行left press

方框 5 显示了所选图像的一些基本信息。

框 1、2、3 和 4 中的图像可以拖放到框 5 中。成功拖放后,丢弃图像的缩略图也会显示在框 5 中。

执行使用RxPy. 我的拖放代码如下所示:

drag_start = self.viewer.events \
    .filter(lambda ev: ev.type == MouseEventType.LeftPress)

drag_move = self.viewer.events \
    .filter(lambda ev: ev.type == MouseEventType.MouseMove)

drag = drag_start \
    .flat_map(lambda ev: \
        drag_move \
        .first()
    )

drag.subscribe(lambda ev: self.start_drag())

# and yes, i do not have a takeUntil mouse release event in my stream. this is done intentionally.

start_drag在光标移动的任何地方都实现了一个缩略图。我已将这部分代码省略了,因为它不是我面临的问题的重点。

我遇到的问题是这个。如果我要选择一个图像,无论我做了多少mouse movestart_drag都会被解雇并创建缩略图。如果mouse move事件发生在上一次之后的某个时间范围之后left press,则不应将其视为拖动事件并且不会触发start_drag。相反,“即时” left press+mouse move事件将被视为拖动事件

应该将什么添加到我的事件流中,以便我能够确定left pressmouse move事件之间的持续时间?随后,如果此持续时间超过时间范围,我将忽略而不开火start_drag。还是有更好的解决方案来解决这个问题?

delaydebounce基本上要么推动或延迟流,我无法通过这些运营商实现我想要的。

4

0 回答 0