Android VirtualDisplay 调整大小 "on flight"

Android VirtualDisplay resize "on flight"

最近在项目中我遇到了调整大小的挑战 VirtualDisplay "on flight"。所以用例是:

我在文档中找到了 VirtualDisplay resize 方法,尽管它似乎对传入的新参数没有影响。为了实施,我正在使用

  virtualDisplay = mDisplayManager.createVirtualDisplay("DispName",
                        getResolution().getResolutionWidth(), getResolution().getResolutionHeight(),
                        getDisplayDensity(), inputSurface, DisplayManager.VIRTUAL_DISPLAY_FLAG_PRESENTATION);

其中 inputSurfacemediaEncoder.createInputSurface() 创建并在此时正确配置。所以,问题是,如何调整 VirtualDisplay 的大小?我也没有在官方资源中找到任何示例如何做到这一点,将不胜感激!

更新 只是忘了提及,我已经为 VirtualDisplays 设置了 Listener 并触发了 onChange 方法,尽管检查实际指标是否已更改显示负面结果

回答我自己的问题

VirtualDisplayresize 方法工作得很好,尽管从我的角度来看,这是对如何实现非常具体的行为的误解,当只有底层布局改变它的大小时,尽管元素保持它们的大小较小 window

的属性

所以,如果你想获得某种 "scalar" 调整大小(就像所有东西变大或变小),你应该调用 resize

但是,每当您的项目需要某种调整大小并制作控件时
更大,虽然屏幕变小了
你应该检查你的混凝土 Presentation class 链接到 VirtualDisplay 的扩展,并且只需手动更新你的布局而不需要 VirtualDisplay 调整大小

public void resizeView(final int newWidth, final int newHeight) {
    uiHandler.post(new Runnable() {
        @Override
        public void run() {
            try {
                Constructor<? extends ViewGroup.LayoutParams> ctor = 
                        mainView.getLayoutParams().getClass().getDeclaredConstructor(int.class, int.class);
                mainView.setLayoutParams(ctor.newInstance(newWidth, newHeight));
                mainView.requestLayout();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

其中 uiHandler 即使在后台使用

也可以简单地获得
Handler uiHandler = new Handler(Looper.getMainLooper());

我希望这对某些人有用!