summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/ui/ZoomRenderer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/camera/ui/ZoomRenderer.java')
-rwxr-xr-xsrc/com/android/camera/ui/ZoomRenderer.java65
1 files changed, 64 insertions, 1 deletions
diff --git a/src/com/android/camera/ui/ZoomRenderer.java b/src/com/android/camera/ui/ZoomRenderer.java
index 48a565a6f..eb88decc2 100755
--- a/src/com/android/camera/ui/ZoomRenderer.java
+++ b/src/com/android/camera/ui/ZoomRenderer.java
@@ -16,12 +16,15 @@
package com.android.camera.ui;
+import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
+import android.graphics.Point;
import android.graphics.Rect;
+import android.os.Handler;
import android.view.ScaleGestureDetector;
import org.codeaurora.snapcam.R;
@@ -35,6 +38,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,12 +52,17 @@ 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;
private float mZoomMinValue;
private float mZoomMaxValue;
+ private Point mDispSize;
+ private int mBottomMargin;
+ private int mTopMargin;
+
public interface OnZoomChangedListener {
void onZoomStart();
void onZoomEnd();
@@ -77,6 +87,13 @@ public class ZoomRenderer extends OverlayRenderer
mMinCircle = res.getDimensionPixelSize(R.dimen.zoom_ring_min);
mTextBounds = new Rect();
setVisible(false);
+ mBottomMargin =
+ ctx.getResources().getDimensionPixelSize(R.dimen.preview_bottom_margin);
+ mTopMargin =
+ ctx.getResources().getDimensionPixelSize(R.dimen.preview_top_margin);
+ mDispSize = new Point();
+ Activity activity = (Activity) ctx;
+ activity.getWindowManager().getDefaultDisplay().getRealSize(mDispSize);
}
// set from module
@@ -115,9 +132,13 @@ public class ZoomRenderer extends OverlayRenderer
@Override
public void layout(int l, int t, int r, int b) {
+ l = 0;
+ t = mTopMargin;
+ r = mDispSize.x;
+ b = mDispSize.y - mBottomMargin;
super.layout(l, t, r, b);
mCenterX = (r - l) / 2;
- mCenterY = (b - t) / 2;
+ mCenterY = ((b - t) / 2) + t;
mMaxCircle = Math.min(getWidth(), getHeight());
mMaxCircle = (mMaxCircle - mMinCircle) / 2;
}
@@ -165,6 +186,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);
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ Runnable mOnZoomEnd = new Runnable() {
+ public void run() {
+ mInZoom = false;
+ setVisible(false);
+ if (mListener != null) {
+ mListener.onZoomEnd();
+ }
+ }
+ };
+
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
setVisible(true);