【问题标题】:Make videos scrollable使视频可滚动
【发布时间】:2021-02-10 18:40:34
【问题描述】:

我在由 BoxLayout.y() 分层的表单中存在可滚动性问题。

表单包含许多Tabs(大小固定),Tabs的每个选项卡可以包含图像或视频(视频在BorderLayout内以按选项卡大小缩放)。

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

如果显示视频,y滚动是不可能的,我只能滑动改变标签。

我想这个问题的原因是视频是原生组件(我使用 Codename One API 来显示视频)。

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

【问题讨论】:

  • 这发生在 Android 和 iOS 上。我无法在模拟器上进行测试,因为当表单包含视频时,模拟器会因为错误 github.com/codenameone/CodenameOne/issues/3360 而崩溃
  • 作为一种解决方法,尝试使用video.setEnabled(false),这样它就不会抓取指针事件。我在问题 cmets 中为模拟器问题提供了一个潜在的解决方法
  • video.setEnabled(false) 无法解决。请看我的回答。
  • 这是您想出的一个非常好的解决方案。请注意,在我的建议中,我指的是实际的视频对等点,而不是周围的容器,因此如果您找到该对等点并禁用它,它可能会起作用。但是您的解决方案既优雅又好

标签: codenameone


【解决方案1】:

video.setEnabled(false) 解决方法 (Make videos scrollable) 不起作用。

我以不同的方式解决了问题,将 MediaPlayer 容器插入到 LayeredLayout 容器中,然后在 MediaPlayer 上放置一个按钮。通用的空标签不起作用,但空按钮起作用。当然,我必须重写calcPreferredSize 以使 MediaPlayer 和 Button 具有相同的大小(或使用不同的方法使它们具有相同的大小)。

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

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

        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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2021-07-22
    • 2018-01-18
    相关资源
    最近更新 更多