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

时间:2017-04-26 09:55:56

标签: android android-layout layout opengl-es glsurfaceview

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

What i need with Detail Scenario

1 个答案:

答案 0 :(得分:0)

我已经弄明白了这个问题。 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);