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/宽度/高度。请参阅