summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/ui/ZoomControl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/camera/ui/ZoomControl.java')
-rw-r--r--src/com/android/camera/ui/ZoomControl.java68
1 files changed, 54 insertions, 14 deletions
diff --git a/src/com/android/camera/ui/ZoomControl.java b/src/com/android/camera/ui/ZoomControl.java
index 142e4b8..6bb22a9 100644
--- a/src/com/android/camera/ui/ZoomControl.java
+++ b/src/com/android/camera/ui/ZoomControl.java
@@ -19,8 +19,10 @@ package com.android.camera.ui;
import com.android.camera.R;
import android.content.Context;
+import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
+import android.widget.ImageView;
import android.widget.RelativeLayout;
/**
@@ -30,15 +32,23 @@ import android.widget.RelativeLayout;
public abstract class ZoomControl extends RelativeLayout {
private static final String TAG = "ZoomControl";
+ public static final int ZOOMING_INTERVAL = 300; // milliseconds
+
+ protected ImageView mZoomIn;
+ protected ImageView mZoomOut;
+ protected ImageView mZoomSlider;
+ protected int mSliderPosition = 0;
+ protected int mDegree;
+ protected Handler mHandler;
+
public interface OnZoomChangedListener {
void onZoomValueChanged(int index); // only for immediate zoom
void onZoomStateChanged(int state); // only for smooth zoom
}
- private int mZoomMax, mZoomIndex;
+ protected int mZoomMax, mZoomIndex;
private boolean mSmoothZoomSupported;
private OnZoomChangedListener mListener;
- private boolean mZoomSupported = true;
// The state of zoom button.
public static final int ZOOM_IN = 0;
@@ -47,22 +57,53 @@ public abstract class ZoomControl extends RelativeLayout {
protected OnIndicatorEventListener mOnIndicatorEventListener;
+ protected final Runnable mRunnable = new Runnable() {
+ public void run() {
+ if (mSliderPosition < 0) {
+ zoomIn();
+ } else if (mSliderPosition > 0) {
+ zoomOut();
+ } else {
+ stopZooming();
+ }
+ mHandler.postDelayed(mRunnable, ZOOMING_INTERVAL);
+ }
+ };
+
public ZoomControl(Context context, AttributeSet attrs) {
super(context, attrs);
}
- public abstract void initialize(Context context);
+ public void initialize(Context context) {
+ mZoomIn = addImageView(context, R.drawable.ic_zoom_in_holo_light);
+ mZoomSlider = addImageView(context, R.drawable.btn_zoom_slider);
+ mZoomOut = addImageView(context, R.drawable.ic_zoom_out_holo_light);
+ mHandler = new Handler();
+ }
- public void setZoomMax(int zoomMax) {
- mZoomMax = zoomMax;
+ public void startZoomControl() {
+ mZoomSlider.setPressed(true);
+ mHandler.postDelayed(mRunnable, ZOOMING_INTERVAL);
}
- public void setZoomSupported(boolean supported) {
- mZoomSupported = supported;
+ protected ImageView addImageView(Context context, int iconResourceId) {
+ ImageView image = new RotateImageView(context);
+ image.setImageResource(iconResourceId);
+ addView(image);
+ return image;
}
- public boolean isZoomSupported() {
- return mZoomSupported;
+ public void closeZoomControl() {
+ mHandler.removeCallbacks(mRunnable);
+ mSliderPosition = 0;
+ mZoomSlider.setPressed(false);
+ stopZooming();
+ mOnIndicatorEventListener.onIndicatorEvent(
+ OnIndicatorEventListener.EVENT_LEAVE_ZOOM_CONTROL);
+ }
+
+ public void setZoomMax(int zoomMax) {
+ mZoomMax = zoomMax;
}
public void setOnZoomChangeListener(OnZoomChangedListener listener) {
@@ -78,6 +119,7 @@ public abstract class ZoomControl extends RelativeLayout {
throw new IllegalArgumentException("Invalid zoom value:" + index);
}
mZoomIndex = index;
+ invalidate();
}
public void setSmoothZoomSupported(boolean smoothZoomSupported) {
@@ -108,13 +150,15 @@ public abstract class ZoomControl extends RelativeLayout {
}
} else {
mListener.onZoomStateChanged(index);
+ mZoomIndex = index;
+ invalidate();
}
- mZoomIndex = index;
}
return true;
}
public void setDegree(int degree) {
+ mDegree = degree;
int count = getChildCount();
for (int i = 0 ; i < count ; ++i) {
View view = getChildAt(i);
@@ -123,8 +167,4 @@ public abstract class ZoomControl extends RelativeLayout {
}
}
}
-
- protected int getZoomIndex() {
- return mZoomIndex;
- }
}