Codenameone 代号一-缩放、居中和裁剪视频,以迫使其占据所有屏幕
我在Codenameone 代号一-缩放、居中和裁剪视频,以迫使其占据所有屏幕,codenameone,Codenameone,我在BorderLayout的中心有一个介绍视频,下面有BorderLayout.center\u BEHAVIOR\u TOTAL\u选项。在顶部我有一个徽标,在南部我有登录按钮 我编写了与下面类似的代码,根据设备的旋转选择正确的视频。我测试了视频将自动缩放到可用空间:在我测试的智能手机(Android和iPhone机型)中,视频覆盖了所有屏幕区域(因为视频长度和高度与屏幕长度和高度成比例)。那很好,这正是我想要的 然而,可能有一些智能手机的屏幕大小比例与我测试的不同。此外,所有平板电脑的屏幕
BorderLayout
的中心
有一个介绍视频,下面有BorderLayout.center\u BEHAVIOR\u TOTAL\u选项
。在顶部我有一个徽标,在南部我有登录按钮
我编写了与下面类似的代码,根据设备的旋转选择正确的视频。我测试了视频将自动缩放到可用空间:在我测试的智能手机(Android和iPhone机型)中,视频覆盖了所有屏幕区域(因为视频长度和高度与屏幕长度和高度成比例)。那很好,这正是我想要的
然而,可能有一些智能手机的屏幕大小比例与我测试的不同。此外,所有平板电脑的屏幕大小比例都与智能手机不同
我需要的是,视频将始终占据所有屏幕区域。如有必要,应自动缩放、居中和裁剪以占据所有屏幕
我在代码名中没有找到实现这个用例所需的API。我可以使用什么代码?我的目标设备是Android和iOS设备(智能手机和平板电脑)
代码示例:
Form hi = new Form("Hi World", new BorderLayout(BorderLayout.CENTER_BEHAVIOR_TOTAL_BELOW));
disableToolbar(hi);
introVideoMP4 = "/intro-landscape.mp4";
if (Display.getInstance().isPortrait()) {
introVideoMP4 = "/intro-portrait.mp4";
}
MediaPlayer introVideo = new MediaPlayer();
try {
InputStream videoInputStream = Display.getInstance().getResourceAsStream(getClass(), introVideoMP4);
introVideo.setDataSource(videoInputStream, "video/mp4", () -> {
introVideo.getMedia().setTime(0);
introVideo.getMedia().play();
});
introVideo.setHideNativeVideoControls(true);
introVideo.hideControls();
introVideo.setAutoplay(true);
hi.add(BorderLayout.CENTER, introVideo);
} catch (Exception err) {
Log.e(err);
}
hi.addOrientationListener(l -> {
introVideoMP4 = "/intro-landscape.mp4";
if (Display.getInstance().isPortrait()) {
introVideoMP4 = "/intro-portrait.mp4";
}
try {
InputStream videoInputStream = Display.getInstance().getResourceAsStream(getClass(), introVideoMP4);
introVideo.setDataSource(videoInputStream, "video/mp4", () -> {
introVideo.getMedia().setTime(0);
introVideo.getMedia().play();
});
} catch (Exception err) {
Log.e(err);
}
});
hi.add(BorderLayout.NORTH, new Label("My App"));
Button myButton = new Button("Tap me!");
myButton.addActionListener(l -> {
Log.p("myButton tapped");
});
hi.add(BorderLayout.SOUTH, myButton);
hi.show();
通常,网站根据服务器上的设备比例生成视频下载/流(使用ffmpeg等工具)。然后交付具有正确纵横比、比特率和格式的视频 在Codename One中,没有类似于“fit”scale的用于裁剪视频的内置功能 但是,如果您对裁剪侧面或顶部没有意见,那么您可能可以为视频组件创建自己的布局管理器,并根据您对视频尺寸和屏幕尺寸的了解对其进行定位/调整大小。创建布局管理器非常简单,主要是实现
layoutContainer
m方法,您可以在其中设置组件的X/Y/宽度/高度。请参阅