虚拟导航栏对屏幕分辨率的影响(主要针对华为机)
来源:互联网 发布:纳什均衡与社会学 知乎 编辑:程序博客网 时间:2024/05/22 02:32
最近做一个项目,在初始化相机时需要设置预览分辨率 ,我们采取和手机分辨率相近的比例,例如4:3,或者16:9.的手机,预览分辨率的话选择接近这一比例的一组数据,代码如下:
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> list = parameters.getSupportedPreviewSizes();
Camera.Size size;
int length = list.size();
int previewWidth = 480;
int previewheight = 640;
int second_previewWidth = 0;
int second_previewheight = 0;
if (length == 1)
{
size = list.get(0);
previewWidth = size.width;
previewheight = size.height;
}
else
{
for (int i = 0; i < length; i++)
{
size = list.get(i);
// System.out.println("宽 "+size.width+" 高"+size.height);
if ((width<height&&height*3==width*4)||(width>height&&width*3==height*4))
{
if (size.height <= 960 || size.width <= 1280)
{
second_previewWidth = size.width;
second_previewheight = size.height;
if (previewWidth <= second_previewWidth
&& second_previewWidth * 3 == second_previewheight * 4)
{
previewWidth = second_previewWidth;
previewheight = second_previewheight;
}
}
}
else
{
if((width<height&&height*9==width*16)||(width>height&&width*9==height*16)){
if ((size.height <= 960 || size.width <= 1280)&&size.width*9==size.height*16) {
second_previewWidth = size.width;
second_previewheight = size.height;
if (previewWidth <=second_previewWidth) {
previewWidth = second_previewWidth;
previewheight = second_previewheight;
}
}
}
else{
if (size.height <= 960 || size.width <= 1280)
{
second_previewWidth = size.width;
second_previewheight = size.height;
if (previewWidth <= second_previewWidth)
{
previewWidth = second_previewWidth;
previewheight = second_previewheight;
}
}
}
}
}
}
preWidth = previewWidth;
preHeight = previewheight;
System.out.println("预览分辨率:" + preWidth + " " + preHeight);
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.setPreviewSize(preWidth, preHeight);
但是在华为手机上,由于虚拟导航栏的原因,会使得手机宽高出现偏差,如1920*1080的机器在竖屏时获取的宽小于1080,这样的话相机中的图片会出现轻微的变形,曾经想过利用沉浸模式去掉虚拟导航栏,结果导航栏不见了但是尺寸依旧不对,这里提供一个忽略虚拟导航栏,获取手机真实尺寸的方法:
@SuppressLint("NewApi") private void setScreenSize(Context context)
{
int x, y;
WindowManager wm = ((WindowManager)
context.getSystemService(Context.WINDOW_SERVICE));
Display display = wm.getDefaultDisplay();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
{
Point screenSize = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
{
display.getRealSize(screenSize);
x = screenSize.x;
y = screenSize.y;
} else
{
display.getSize(screenSize);
x = screenSize.x;
y = screenSize.y;
}
} else
{
x = display.getWidth();
y = display.getHeight();
}
width = x;
height = y;
}
经测试,此方法可行
- 虚拟导航栏对屏幕分辨率的影响(主要针对华为机)
- 对C++基础知识的总结(主要针对笔试面试)
- Android手机获取屏幕分辨率高度因虚拟导航栏带来的问题
- 华为底部虚拟导航栏挡住布局
- 解决安卓7.0拍照更换头像重启的问题(主要针对华为手机)
- iOS导航栏对view尺寸的影响
- 操作系统对硬件虚拟化的影响
- iOS取消导航对视图的影响
- PopupWindow 在华为手机等某些自带虚拟导航栏底部被挡住的解决
- 华为等手机获得底部虚拟导航的高度
- android针对对不导航栏遮挡问题解决办法
- uiscrollview 怎样去掉导航栏对他顶部的空白的影响
- uiscrollview 怎样去掉导航栏对他顶部的空白的影响
- IOS导航栏translucent对6plus适配的影响
- 改变HyperV虚拟的Ubuntu屏幕分辨率
- 改变HyperV虚拟的Ubuntu server屏幕分辨率
- [笔记]scanf的使用(主要是针对char)
- C++基础知识的总结(主要针对面试)
- Ubuntu 15.10安装ionic环境
- [IMX6Q][Android5.1]移植笔记 --- kernel移植
- 键盘对应的ASCII码
- 三大移动Web开发框架_jquery mobile_jQTouch_sencha touch
- ubuntu python2.7 tab补全
- 虚拟导航栏对屏幕分辨率的影响(主要针对华为机)
- Win10 安装过程中遇到的各种问题
- Spark Tungsten(钨丝计划)内存详解
- ffmpeg的编译、安装及使用 .
- 北大1114 神奇的口袋
- 递归求三角数字
- MyEclipse8.6 破解以及注册码
- MyBatis传入多个参数
- python的私有变量 是类变量吗?