Codenameone 使视频可滚动

Codenameone 使视频可滚动,codenameone,Codenameone,我有一个表单中的可滚动性问题,由BoxLayout.y()分层 表单包含许多选项卡(具有固定大小),每个选项卡都可以包含图像或视频(视频位于BorderLayout中,以按选项卡大小进行缩放) 如果显示图像,则上下滚动操作正常 如果显示视频,y滚动是不可能的,我只能滑动以更改选项卡 我认为这个问题的原因是视频是本地组件(我使用代码名One API来显示视频) 我如何解决或解决此问题?这对于应用程序设计至关重要。谢谢你的提示。视频.setEnabled(false)解决方法()不起作用 我采用了另

我有一个表单中的可滚动性问题,由BoxLayout.y()分层

表单包含许多选项卡(具有固定大小),每个选项卡都可以包含图像或视频(视频位于BorderLayout中,以按选项卡大小进行缩放)

如果显示图像,则上下滚动操作正常

如果显示视频,y滚动是不可能的,我只能滑动以更改选项卡

我认为这个问题的原因是视频是本地组件(我使用代码名One API来显示视频)

我如何解决或解决此问题?这对于应用程序设计至关重要。谢谢你的提示。

视频.setEnabled(false)解决方法()不起作用

我采用了另一种解决方法,将MediaPlayer容器插入到分层布局容器中,然后在MediaPlayer上放置一个按钮。一般的空标签不起作用,但空按钮起作用。当然,我必须重写
calcPreferredSize
,使MediaPlayer和按钮具有相同的大小(或者使用不同的方法使它们具有相同的大小)

这允许滚动,但防止点击播放和暂停按钮(位于视频上方)。我也解决了这个问题

简而言之,这是我的解决方案,在模拟器、Android和iOS上进行了测试(在下面的代码中,请注意,
videoBtnsCnt
是视频上的一个容器,我在其中插入了播放和暂停按钮):


这种情况发生在Android和iOS上。我无法在模拟器上进行测试,因为当表单包含视频时,模拟器会崩溃,因为作为一种解决方法,请尝试使用
video.setEnabled(false)
,这样它就不会捕获指针事件。我在问题注释
video中为模拟器问题提供了一个潜在的解决方法。setEnabled(false)
无法解决。请看我的答案。这是你提出的一个很好的解决方案。注意,在我的建议中,我指的是实际的视频对等点,而不是周围的容器,因此如果您找到该对等点并禁用它,它可能会起作用。但是你的解决方案是优雅而好的
        MediaPlayer mediaPlayer = new MediaPlayer(video) {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(size, size);
            }
        };

        Container mediaPlayerCnt = new Container(new LayeredLayout(), "NoMarginNoPadding") {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(size, size);
            }
        };
        mediaPlayerCnt.add(mediaPlayer);

        Button allowScrollingLabel = new Button() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(size, size);
            }
        };
        allowScrollingLabel.setUIID("NoMarginNoPadding");
        allowScrollingLabel.addActionListener(l -> {
            Component responder = videoBtnsCnt.getResponderAt(l.getX(), l.getY());
            if (responder instanceof Button) {
                // it can be a play button or a pause button
                ((Button) responder).pressed();
                ((Button) responder).released();
            }
        });
        mediaPlayerCnt.add(allowScrollingLabel);