如何对自定义组件中的拖动结束做出反应

时间:2019-06-06 09:13:16

标签: codenameone

我注意到不能保证在调用了pointerPressed方法之后调用组件pointerReleased方法。

使用Conponent派生程序(可处理指针事件)-在所有情况下都可以通过哪种方式来获得有关指针释放事件的通知?

说我的自定义组件应该是绿色的,在点击时会变成红色。当指针不再被按下时,我如何保证它再次变为绿色?


新示例-使用isStickyDrag()派生的组件返回true-记录了指针事件-按下该组件然后垂直拖动时,周围的Container实例滚动-没有指针释放:

    Form hi = new Form("Hi World", BoxLayout.y());
    hi.setScrollableY(true);
    Component component = new Component() {
        @Override
        protected Dimension calcPreferredSize() {
            return new Dimension(120, 120);
        }
        @Override
        public void paint(Graphics aGraphics) {
            aGraphics.setColor(0x000000);
            aGraphics.drawRoundRect(getX(), getY(), getWidth() - 1, getHeight() - 1, 20, 20);
        }
        @Override
        protected boolean isStickyDrag() {
            return true;
        }
        protected int getDragRegionStatus(int x, int y) {
            return Component.DRAG_REGION_IMMEDIATELY_DRAG_XY;
        };
        @Override
        public void pointerPressed(int x, int y) {
            super.pointerPressed(x, y);
            Log.p("pointerPressed(" + x + ", " + y + ")");
        }
        @Override
        public void pointerReleased(int x, int y) {
            super.pointerReleased(x, y);
            Log.p("pointerReleased(" + x + ", " + y + ")");
        }
    };
    hi.add(component);
    hi.show();

1 个答案:

答案 0 :(得分:0)

它应该像这样重写isStickyDrag方法:

protected boolean isStickyDrag() {
    return true;
}

它已经定义了它,在这种情况下,应该始终接收指针释放事件。