本文實(shí)例講述了Android自定義照相機(jī)Camera出現(xiàn)黑屏的解決方法。分享給大家供大家參考,具體如下:
對(duì)于一些手機(jī),像HTC,當(dāng)自定義Camera時(shí),調(diào)用Camera.Parameters的 parameters.setPreviewSize(width, height)方法時(shí),如果width和height為奇數(shù)情況下,則會(huì)出現(xiàn)黑屏現(xiàn)象,解決辦法可參考SDK提供的ApiDemos中關(guān)于Camera的 例子:
List<Size> sizes = parameters.getSupportedPreviewSizes();Size optimalSize = getOptimalPreviewSize(sizes, w, h);parameters.setPreviewSize(optimalSize.width, optimalSize.height);
同時(shí),在HTC手機(jī)中,設(shè)置parameters.setPictureSize(width,height)屬性,也會(huì)導(dǎo)致黑屏,而在三星手機(jī)上則沒(méi)有問(wèn)題。還有如果設(shè)置setPreviewSize屬性的寬高錯(cuò)誤的話(huà),拍出的照片也會(huì)存在失真等Bug,所以遇到適配問(wèn)題時(shí),最好的辦法就是不設(shè)置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;}更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Android拍照與圖片處理技巧總結(jié)》、《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選