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

Android-视频图像在GLSurfaceView中从右侧剪切,android,android-layout,layout,opengl-es,glsurfaceview,Android,Android Layout,Layout,Opengl Es,Glsurfaceview,我正在使用GLSurfaceView将相机数据渲染为视频,显示在设备屏幕上。我正在从相机中获取预览,并在GLSURFACHEVIEW上渲染该预览。那部分很好用。我的GLSurfaceView作为FrameLayout的子项添加。用户可以双击该FrameLayout。在双击中,我使图像全屏打开和关闭。这就是我面临的问题。我正在上传一些图片,以便更好地描述问题。第一个图像显示正常模式,工作正常。这是一个352*288大小的图像,通过填充宽度作为匹配项来安装屏幕,高度通过屏幕宽度*(纵横比)计算。在双

我正在使用
GLSurfaceView
将相机数据渲染为视频,显示在设备屏幕上。我正在从相机中获取预览,并在GLSURFACHEVIEW上渲染该预览。那部分很好用。我的
GLSurfaceView
作为
FrameLayout
的子项添加。用户可以双击该
FrameLayout
。在双击中,我使图像全屏打开和关闭。这就是我面临的问题。我正在上传一些图片,以便更好地描述问题。第一个图像显示正常模式,工作正常。这是一个352*288大小的图像,通过填充宽度作为匹配项来安装屏幕,高度通过
屏幕宽度*(纵横比)
计算。在双击时,我将全屏显示。计算方法是,我将高度填充为
匹配父对象
,并将宽度计算为图像的
屏幕宽度*纵横比
。所有这些都是通过使用
ViewGroup.LayoutParams
更改
GLSUrfaceView
的宽度和高度来完成的。但问题是图像变大了,而且只从右侧切割。我希望图像在所有侧面都被等分切割,这样图像的真实图像中心就可以放在显示中心。在第三张图片上,我展示了我想要的。我不知道怎么做。任何帮助都是值得的。提前感谢


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

ViewGroup.MarginLayoutParams MarginLayoutParams=(ViewGroup.MarginLayoutParams)getLayoutParams();
if(CallConstants.isFullScreenMode){
如果(layoutParams.widthViewGroup.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);