这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
这篇文章主要介绍了Android自定义照相机Camera出现黑屏的解决方法,分析了黑屏出现的原因及参考解决方法,需要的朋友可以参考下
本文实例讲述了Android自定义照相机Camera出现黑屏的解决方法。分享给大家供大家参考,具体如下:
对于一些手机,像HTC,当自定义Camera时,调用Camera.Parameters的 parameters.setPreviewSize(width, height)方法时,如果width和height为奇数情况下,则会出现黑屏现象,解决办法可参考SDK提供的ApiDemos中关于Camera的 例子:
- List < Size > sizes = parameters.getSupportedPreviewSizes();
- Size optimalSize = getOptimalPreviewSize(sizes, w, h);
- parameters.setPreviewSize(optimalSize.width, optimalSize.height);
同时,在HTC手机中,设置parameters.setPictureSize(width,height)属性,也会导致黑屏,而在三星手机上则没有问题。还有如果设置setPreviewSize属性的宽高错误的话,拍出的照片也会存在失真等Bug,所以遇到适配问题时,最好的办法就是不设置PreviewSize和PictureSize属性。
getOptimalPreviewSize方法
- private Size getOptimalPreviewSize(List < Size > sizes, int w, int h) {
- final double ASPECT_TOLERANCE = 0.05;
- double targetRatio = (double) w / h;
- if (sizes == null) return null;
- Size optimalSize = null;
- double minDiff = Double.MAX_VALUE;
- int targetHeight = h;
- // Try to find an size match aspect ratio and size
- for (Size size: sizes) {
- double ratio = (double) size.width / size.height;
- if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
- if (Math.abs(size.height - targetHeight) < minDiff) {
- optimalSize = size;
- minDiff = Math.abs(size.height - targetHeight);
- }
- }
- // Cannot find the one match the aspect ratio, ignore the requirement
- if (optimalSize == null) {
- minDiff = Double.MAX_VALUE;
- for (Size size: sizes) {
- if (Math.abs(size.height - targetHeight) < minDiff) {
- optimalSize = size;
- minDiff = Math.abs(size.height - targetHeight);
- }
- }
- }
- return optimalSize;
- }
希望本文所述对大家Android程序设计有所帮助。
来源: http://www.phperz.com/article/17/0917/348284.html