diff options
author | Wu-cheng Li <wuchengli@google.com> | 2009-06-06 16:53:44 +0800 |
---|---|---|
committer | Wu-cheng Li <wuchengli@google.com> | 2009-06-08 16:37:40 +0800 |
commit | 95fc5b2c5b14bb81332570f6d74f75cd63ea04b5 (patch) | |
tree | 0ab39d6f90b1588481c92a6b2c0c3685347f2d79 /src/com | |
parent | e6378074f505cb459f3a945b2ab8a46b09e0906d (diff) | |
download | LegacyCamera-95fc5b2c5b14bb81332570f6d74f75cd63ea04b5.zip LegacyCamera-95fc5b2c5b14bb81332570f6d74f75cd63ea04b5.tar.gz LegacyCamera-95fc5b2c5b14bb81332570f6d74f75cd63ea04b5.tar.bz2 |
Add camera zoom UI.
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/camera/Camera.java | 138 |
1 files changed, 116 insertions, 22 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java index f77c622..e35cea1 100644 --- a/src/com/android/camera/Camera.java +++ b/src/com/android/camera/Camera.java @@ -55,6 +55,7 @@ import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; +import android.view.MotionEvent; import android.view.OrientationEventListener; import android.view.SurfaceHolder; import android.view.View; @@ -66,6 +67,7 @@ import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.widget.ImageView; import android.widget.Toast; +import android.widget.ZoomButtonsController; import java.io.File; import java.io.FileNotFoundException; @@ -73,6 +75,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; +import java.util.StringTokenizer; /** * Activity of the Camera which used to see preview and take pictures. @@ -107,8 +110,11 @@ public class Camera extends Activity implements View.OnClickListener, public static final int MENU_SAVE_CAMERA_VIDEO_DONE = 37; private android.hardware.Camera.Parameters mParameters; + private int mZoomIndex = 0; // The index of the current zoom value. + private String[] mZoomValues; // All possible zoom values. // The parameter strings to communicate with camera driver. + public static final String PARM_ZOOM = "zoom"; public static final String PARM_WHITE_BALANCE = "whitebalance"; public static final String PARM_EFFECT = "effect"; public static final String PARM_BRIGHTNESS = "exposure-offset"; @@ -120,6 +126,7 @@ public class Camera extends Activity implements View.OnClickListener, public static final String PARM_GPS_LONGITUDE = "gps-longitude"; public static final String PARM_GPS_ALTITUDE = "gps-altitude"; public static final String PARM_GPS_TIMESTAMP = "gps-timestamp"; + public static final String SUPPORTED_ZOOM = "zoom-values"; public static final String SUPPORTED_WHITE_BALANCE = "whitebalance-values"; public static final String SUPPORTED_EFFECT = "effect-values"; public static final String SUPPORTED_BRIGHTNESS = "exposure-offset-values"; @@ -140,17 +147,31 @@ public class Camera extends Activity implements View.OnClickListener, private android.hardware.Camera mCameraDevice; private VideoPreview mSurfaceView; private SurfaceHolder mSurfaceHolder = null; + private ShutterButton mShutterButton; + private FocusRectangle mFocusRectangle; + private ImageView mGpsIndicator; + private ToneGenerator mFocusToneGenerator; + private ZoomButtonsController mZoomButtons; + + // mPostCaptureAlert, mLastPictureButton, mThumbController + // are non-null only if isImageCaptureIntent() is true. + private View mPostCaptureAlert; + private ImageView mLastPictureButton; + private ThumbnailController mThumbController; private int mOriginalViewFinderWidth, mOriginalViewFinderHeight; private int mViewFinderWidth, mViewFinderHeight; - private boolean mPreviewing = false; private Capturer mCaptureObject; private ImageCapture mImageCapture = null; - private boolean mPausing = false; - private boolean mFirstTimeInitialized = false; - private boolean mPendingFirstTimeInit = false; + private boolean mPreviewing; + private boolean mPausing; + private boolean mFirstTimeInitialized; + private boolean mPendingFirstTimeInit; + private boolean mKeepAndRestartPreview; + private boolean mIsImageCaptureIntent; + private boolean mRecordLocation; private static final int FOCUS_NOT_STARTED = 0; private static final int FOCUSING = 1; @@ -166,12 +187,6 @@ public class Camera extends Activity implements View.OnClickListener, private LocationManager mLocationManager = null; - private ShutterButton mShutterButton; - - private FocusRectangle mFocusRectangle; - private ImageView mGpsIndicator; - private ToneGenerator mFocusToneGenerator; - // Use OneShotPreviewCallback to measure the time between // JpegPictureCallback and preview. private final OneShotPreviewCallback mOneShotPreviewCallback = @@ -188,7 +203,6 @@ public class Camera extends Activity implements View.OnClickListener, private long mRawPictureCallbackTime; private long mJpegPictureCallbackTime; private int mPicturesRemaining; - private boolean mRecordLocation; //Add the camera latency time public static long mAutoFocusTime; @@ -200,16 +214,6 @@ public class Camera extends Activity implements View.OnClickListener, // Focus mode. Options are pref_camera_focusmode_entryvalues. private String mFocusMode; - private boolean mKeepAndRestartPreview; - - private boolean mIsImageCaptureIntent; - - // mPostCaptureAlert, mLastPictureButton, mThumbController - // are non-null only if isImageCaptureIntent() is true. - private View mPostCaptureAlert; - private ImageView mLastPictureButton; - private ThumbnailController mThumbController; - private final Handler mHandler = new MainHandler(); private interface Capturer { @@ -326,6 +330,8 @@ public class Camera extends Activity implements View.OnClickListener, initializeFocusTone(); + initializeZoom(); + mFirstTimeInitialized = true; } @@ -345,6 +351,70 @@ public class Camera extends Activity implements View.OnClickListener, initializeFocusTone(); } + private void initializeZoom() { + String zoomValuesStr = mParameters.get(SUPPORTED_ZOOM); + if (zoomValuesStr == null) return; + + mZoomValues = getZoomValues(zoomValuesStr); + if (mZoomValues == null) return; + + mZoomButtons = new ZoomButtonsController(mSurfaceView); + mZoomButtons.setAutoDismissed(true); + mZoomButtons.setOnZoomListener( + new ZoomButtonsController.OnZoomListener() { + public void onVisibilityChanged(boolean visible) { + if (visible) { + updateZoomButtonsEnabled(); + } + } + + public void onZoom(boolean zoomIn) { + if (zoomIn) { + zoomIn(); + } else { + zoomOut(); + } + updateZoomButtonsEnabled(); + } + }); + } + + private void zoomIn() { + if (mZoomIndex < mZoomValues.length - 1) { + mZoomIndex++; + mParameters.set(PARM_ZOOM, mZoomValues[mZoomIndex]); + mCameraDevice.setParameters(mParameters); + } + } + + private void zoomOut() { + if (mZoomIndex > 0) { + mZoomIndex--; + mParameters.set(PARM_ZOOM, mZoomValues[mZoomIndex]); + mCameraDevice.setParameters(mParameters); + } + } + + private void updateZoomButtonsEnabled() { + mZoomButtons.setZoomInEnabled(mZoomIndex < mZoomValues.length - 1); + mZoomButtons.setZoomOutEnabled(mZoomIndex > 0); + } + + private String[] getZoomValues(String zoomValuesStr) { + ArrayList<String> list = new ArrayList<String>(); + String[] zoomValues = null; + StringTokenizer tokenizer = new StringTokenizer(zoomValuesStr, ","); + + while (tokenizer.hasMoreElements()) { + list.add(tokenizer.nextToken()); + } + if (list.size() > 0) { + zoomValues = list.toArray(new String[list.size()]); + } + return zoomValues; + } + + LocationListener [] mLocationListeners = new LocationListener[] { new LocationListener(LocationManager.GPS_PROVIDER), new LocationListener(LocationManager.NETWORK_PROVIDER) @@ -767,7 +837,6 @@ public class Camera extends Activity implements View.OnClickListener, return m; } - /** Called with the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -1113,6 +1182,12 @@ public class Camera extends Activity implements View.OnClickListener, mImageCapture.clearLastBitmap(); mImageCapture = null; + // This is necessary to make the ZoomButtonsController unregister + // its configuration change receiver. + if (mZoomButtons != null) { + mZoomButtons.setVisible(false); + } + // Remove the messages in the event queue. mHandler.removeMessages(CLEAR_SCREEN_DELAY); mHandler.removeMessages(RESTART_PREVIEW); @@ -1232,6 +1307,20 @@ public class Camera extends Activity implements View.OnClickListener, return super.onKeyUp(keyCode, event); } + @Override + public boolean onTouchEvent(MotionEvent event) { + if (mPausing) return true; + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + if (mZoomButtons != null) { + mZoomButtons.setVisible(true); + } + return true; + } + return super.onTouchEvent(event); + } + private void doSnap() { // If the user has half-pressed the shutter and focus is completed, we // can take the photo right away. If the focus mode is infinity, we can @@ -1457,6 +1546,11 @@ public class Camera extends Activity implements View.OnClickListener, getString(R.string.pref_camera_iso_default)); mParameters.set(PARM_ISO, iso); + // Set zoom. + if (mZoomValues != null) { + mParameters.set(PARM_ZOOM, mZoomValues[mZoomIndex]); + } + mCameraDevice.setParameters(mParameters); } |