From ad27bcf9b10788bbca5df1218136bc339f90b184 Mon Sep 17 00:00:00 2001 From: Lars Greiss Date: Sun, 2 Feb 2014 03:09:22 +0100 Subject: Camera2: tweak volume key zoom and cleanup - cleanup unused code - cleanup codestyle - add more zoom steps for smother zooming - show zoom circle indicator during zoom Change-Id: I5214fc2620a0c5167bfdc8e85f7115966c3b8bcf --- src/com/android/camera/PhotoUI.java | 7 +++++ src/com/android/camera/PreviewGestures.java | 7 +++++ src/com/android/camera/VideoUI.java | 11 +------ src/com/android/camera/ui/ZoomRenderer.java | 46 +++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 10 deletions(-) diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index a3174a67d..5b75b54f7 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -1314,6 +1314,13 @@ public class PhotoUI implements PieListener, mFaceView.setFaces(faces); } + public boolean onScaleStepResize(boolean direction) { + if(mGestures != null){ + return mGestures.onScaleStepResize(direction); + } + return false; + } + @Override public void onDisplayChanged() { Log.d(TAG, "Device flip detected."); diff --git a/src/com/android/camera/PreviewGestures.java b/src/com/android/camera/PreviewGestures.java index 0ac6ce01c..7aa5fa84c 100644 --- a/src/com/android/camera/PreviewGestures.java +++ b/src/com/android/camera/PreviewGestures.java @@ -293,5 +293,12 @@ public class PreviewGestures public void onScaleEnd(ScaleGestureDetector detector) { mZoom.onScaleEnd(detector); } + + public boolean onScaleStepResize(boolean direction) { + if(mZoom != null){ + return mZoom.onScaleStepResize(direction); + } + return false; + } } diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java index adda6b206..3c461f213 100644 --- a/src/com/android/camera/VideoUI.java +++ b/src/com/android/camera/VideoUI.java @@ -22,7 +22,6 @@ import org.codeaurora.snapcam.R; import android.content.res.Configuration; import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Point; import android.graphics.drawable.ColorDrawable; @@ -1100,21 +1099,13 @@ public class VideoUI implements PieRenderer.PieListener, return mCameraControls.getVisibility() == View.VISIBLE; } - public boolean onScaleStepResize(boolean direction) - { + public boolean onScaleStepResize(boolean direction) { if(mGestures != null){ return mGestures.onScaleStepResize(direction); } return false; } - public void onScaleChangeDraw(Canvas canvas) - { - if(mGestures != null){ - mGestures.onScaleChangeDraw(canvas); - } - } - @Override public void onDisplayChanged() { mCameraControls.checkLayoutFlip(); diff --git a/src/com/android/camera/ui/ZoomRenderer.java b/src/com/android/camera/ui/ZoomRenderer.java index 11bff7a8d..9d655378a 100644 --- a/src/com/android/camera/ui/ZoomRenderer.java +++ b/src/com/android/camera/ui/ZoomRenderer.java @@ -22,6 +22,7 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; +import android.os.Handler; import android.view.ScaleGestureDetector; import org.codeaurora.snapcam.R; @@ -35,6 +36,8 @@ public class ZoomRenderer extends OverlayRenderer private int mMinZoom; private OnZoomChangedListener mListener; + private final Handler mHandler = new Handler(); + private ScaleGestureDetector mDetector; private Paint mPaint; private Paint mTextPaint; @@ -47,6 +50,7 @@ public class ZoomRenderer extends OverlayRenderer private int mOuterStroke; private int mZoomSig; private int mZoomFraction; + private boolean mInZoom; private Rect mTextBounds; private int mOrientation; private boolean mCamera2 = false; @@ -165,6 +169,48 @@ public class ZoomRenderer extends OverlayRenderer return true; } + public boolean onScaleStepResize(boolean direction) { + int zoom; + float circle; + float circleStep = (mMaxCircle - mMinCircle)/18; + if(direction){ + circle = (int) (mCircleSize + circleStep); + } else { + circle = (int) (mCircleSize - circleStep); + } + circle = Math.max(mMinCircle, circle); + circle = Math.min(mMaxCircle, circle); + if (mListener != null && (int) circle != mCircleSize + && ((mMaxCircle - mMinCircle) > 0)) { + mCircleSize = (int) circle; + zoom = mMinZoom + (int) ((mCircleSize - mMinCircle) + * (mMaxZoom - mMinZoom) / (mMaxCircle - mMinCircle)); + if (mListener != null) { + mHandler.removeCallbacks(mOnZoomEnd); + if (!mInZoom) { + mInZoom = true; + setVisible(true); + mListener.onZoomStart(); + update(); + } + mListener.onZoomValueChanged(zoom); + mHandler.postDelayed(mOnZoomEnd, 300); + } + update(); + } + return true; + } + + Runnable mOnZoomEnd = new Runnable() { + public void run() { + mInZoom = false; + setVisible(false); + if (mListener != null) { + mListener.onZoomEnd(); + } + } + }; + @Override public boolean onScaleBegin(ScaleGestureDetector detector) { setVisible(true); -- cgit v1.2.3