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);
我正在使用 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);