Codenameone 使视频可滚动
我有一个表单中的可滚动性问题,由BoxLayout.y()分层 表单包含许多选项卡(具有固定大小),每个选项卡都可以包含图像或视频(视频位于BorderLayout中,以按选项卡大小进行缩放) 如果显示图像,则上下滚动操作正常 如果显示视频,y滚动是不可能的,我只能滑动以更改选项卡 我认为这个问题的原因是视频是本地组件(我使用代码名One API来显示视频) 我如何解决或解决此问题?这对于应用程序设计至关重要。谢谢你的提示。视频.setEnabled(false)解决方法()不起作用 我采用了另一种解决方法,将MediaPlayer容器插入到分层布局容器中,然后在MediaPlayer上放置一个按钮。一般的空标签不起作用,但空按钮起作用。当然,我必须重写Codenameone 使视频可滚动,codenameone,Codenameone,我有一个表单中的可滚动性问题,由BoxLayout.y()分层 表单包含许多选项卡(具有固定大小),每个选项卡都可以包含图像或视频(视频位于BorderLayout中,以按选项卡大小进行缩放) 如果显示图像,则上下滚动操作正常 如果显示视频,y滚动是不可能的,我只能滑动以更改选项卡 我认为这个问题的原因是视频是本地组件(我使用代码名One API来显示视频) 我如何解决或解决此问题?这对于应用程序设计至关重要。谢谢你的提示。视频.setEnabled(false)解决方法()不起作用 我采用了另
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);