From b48b8d09130c8a5bd5f6f3f9121aa1a1b2e11a46 Mon Sep 17 00:00:00 2001 From: jerry Date: Wed, 11 May 2016 22:03:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=B9=E7=84=A6=E4=BD=8E?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=9F=90=E4=BA=9B=E5=87=BD=E6=95=B0=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jerry/sweetcamera/widget/CameraView.java | 59 +++++++++++-------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/jerry/sweetcamera/widget/CameraView.java b/app/src/main/java/com/jerry/sweetcamera/widget/CameraView.java index dc8aeb5..f547c35 100644 --- a/app/src/main/java/com/jerry/sweetcamera/widget/CameraView.java +++ b/app/src/main/java/com/jerry/sweetcamera/widget/CameraView.java @@ -7,6 +7,7 @@ import android.graphics.Rect; import android.hardware.Camera; import android.hardware.SensorManager; +import android.os.Build; import android.util.AttributeSet; import android.util.Log; import android.view.OrientationEventListener; @@ -366,38 +367,48 @@ protected boolean onFocus(Point point, Camera.AutoFocusCallback callback) { return false; } //不支持设置自定义聚焦,则使用自动聚焦,返回 - if (parameters.getMaxNumFocusAreas() <= 0) { + + if(Build.VERSION.SDK_INT >= 14) { + + if (parameters.getMaxNumFocusAreas() <= 0) { + return focus(callback); + } + + Log.i(TAG, "onCameraFocus:" + point.x + "," + point.y); + + List areas = new ArrayList(); + int left = point.x - 300; + int top = point.y - 300; + int right = point.x + 300; + int bottom = point.y + 300; + left = left < -1000 ? -1000 : left; + top = top < -1000 ? -1000 : top; + right = right > 1000 ? 1000 : right; + bottom = bottom > 1000 ? 1000 : bottom; + areas.add(new Camera.Area(new Rect(left, top, right, bottom), 100)); + parameters.setFocusAreas(areas); try { - mCamera.autoFocus(callback); + //本人使用的小米手机在设置聚焦区域的时候经常会出异常,看日志发现是框架层的字符串转int的时候出错了, + //目测是小米修改了框架层代码导致,在此try掉,对实际聚焦效果没影响 + mCamera.setParameters(parameters); } catch (Exception e) { + // TODO: handle exception e.printStackTrace(); - }finally { return false; } } - Log.i(TAG, "onCameraFocus:" + point.x + "," + point.y); - - List areas = new ArrayList(); - int left = point.x - 300; - int top = point.y - 300; - int right = point.x + 300; - int bottom = point.y + 300; - left = left < -1000 ? -1000 : left; - top = top < -1000 ? -1000 : top; - right = right > 1000 ? 1000 : right; - bottom = bottom > 1000 ? 1000 : bottom; - areas.add(new Camera.Area(new Rect(left, top, right, bottom), 100)); - parameters.setFocusAreas(areas); + + return focus(callback); + } + + private boolean focus(Camera.AutoFocusCallback callback) { try { - //本人使用的小米手机在设置聚焦区域的时候经常会出异常,看日志发现是框架层的字符串转int的时候出错了, - //目测是小米修改了框架层代码导致,在此try掉,对实际聚焦效果没影响 - mCamera.setParameters(parameters); + mCamera.autoFocus(callback); } catch (Exception e) { - // TODO: handle exception e.printStackTrace(); + return false; } - mCamera.autoFocus(callback); return true; } @@ -431,8 +442,10 @@ public void surfaceDestroyed(SurfaceHolder holder) { releaseCamera(); //释放资源 - if(holder!=null){ - holder.getSurface().release(); + if (holder != null) { + if (Build.VERSION.SDK_INT >= 14) { + holder.getSurface().release(); + } } } catch (Exception e) { //相机已经关了