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