Android - 视频图像在 GLSurfaceView 中从右侧剪切

Android - Video Image is cut from the right side in GLSurfaceView

我正在使用 GLSurfaceView 将相机数据渲染为设备屏幕上显示的视频。我正在从相机进行预览并在我的 GLSurfaceView 上渲染该预览。那部分工作正常。我的 GLSurfaceView 添加为 FrameLayout 的 child。用户可以双击 FrameLayout。双击,我使图像全屏打开和关闭。这是我面临的问题。我正在上传一些图片以更好地描述问题。第一张图片显示正常模式,它工作正常。这是一个 352*288 大小的图像,通过填充宽度 MATCH_PARENT 和高度 SCREEN_WIDTH*(Aspect_Ratio) 来计算屏幕。在双击我全屏。计算是我将高度填充为 MATCH_PARENT 并将宽度计算为图像的 SCREEN_WIDTH*ASPECT_RATIO。都是通过用ViewGroup.LayoutParams改变GLSUrfaceView的宽高来完成的。但问题是图像变大了,而且只从右侧切开。我希望图像的所有边都被切割成相等的,这样图像的真实图像中心就可以放在显示中心。在第三张图片上,我展示了我想要的东西。我不知道该怎么做。任何帮助将不胜感激。提前致谢

我已经找到问题了。 Android 默认情况下从屏幕的左边缘开始显示图像。由于我的图像比屏幕大,所以超出的部分从右侧超出了屏幕。解决方案是计算宽度或高度差异,然后在左侧(宽度)或顶部(高度)添加边距

ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();

if (CallConstants.isFullScreenMode) {
    if (layoutParams.width < displayWidth || layoutParams.height<displayHeight) {
        marginLayoutParams.setMargins(0, 0, 0, 0);
        setLayoutParams(marginLayoutParams);
        return;
    }
    int margin;
    if (mContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        margin = (-(int) ((layoutParams.width - displayWidth) / 2));
        marginLayoutParams.setMargins(margin, 0, 0, 0);
    } else {
        margin = (-1 * (int) ((layoutParams.height - displayHeight) / 2));
        marginLayoutParams.setMargins(0, margin, 0, 0);
    }
} else {
    marginLayoutParams.setMargins(0, 0, 0, 0);
}

setLayoutParams(marginLayoutParams);