如何处理Component中的水平指针移动和父容器中的垂直指针移动

时间:2018-12-14 07:50:02

标签: codenameone

我实际上曾经问过这个问题,但没有得到满意的答复-因此,我将尝试以不同的方式提出问题。

当BoxLayout.X容器嵌套在BoxLayout.Y容器中时,它既可以双向滚动,又可以在达到一定阈值后坚持垂直或水平移动。

我想要的是与Component相同的行为,其中使用BoxLayout.Y将Component派生嵌套在Container中。 Component派生函数和嵌套在其上的Container都应处理指针移动-Component进行水平移动,Container进行垂直指针移动-直到指针移动了一定距离,然后它应该锁定为垂直移动或水平移动,就像已经可以使用嵌套的Container组件一样。

这将大大改善用户体验,因为开箱即用Codename One垂直拖动一个开关是行不通的,因为它吞没了所有指针事件,不仅吞噬了水平移动,而且吞噬了所有指针移动。 现在-由于无法将指针移动事件委托给父容器,因此上述期望的行为似乎很难实现。

关于如何实现的任何想法?

2 个答案:

答案 0 :(得分:0)

这是多层实现的。其中之一是:

protected int getDragRegionStatus(int x, int y);

通过重写此方法,组件可以将偏倚返回给特定轴。例如。通过返回DRAG_REGION_LIKELY_DRAG_X

第二位通过形式为stickyDrag的成员,该成员将拖动行为偏向源组件。

答案 1 :(得分:0)

很显然,当不重写Component pointer *方法或重写方法调用super方法时,默认滚动功能起作用。

在Codename One Switch组件中,父容器的垂直滚动不起作用,因为它只是覆盖了Component *的指针*方法。请参见issue 2645

中的相应错误