diff options
Diffstat (limited to 'src/com/android/camera/PhotoUI.java')
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 65 |
1 files changed, 28 insertions, 37 deletions
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index e10570a08..a0e8b9b82 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -19,16 +19,15 @@ package com.android.camera; import java.util.List; -import android.animation.Animator; -import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; import android.app.AlertDialog; import android.content.DialogInterface; +import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.SurfaceTexture; import android.hardware.Camera; import android.hardware.Camera.Face; import android.hardware.Camera.Size; +import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.util.Log; @@ -41,6 +40,7 @@ import android.view.ViewGroup; import android.view.ViewStub; import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; +import android.widget.ImageView; import android.widget.Toast; import com.android.camera.CameraPreference.OnPreferenceChangedListener; @@ -69,6 +69,8 @@ public class PhotoUI implements PieListener, private static final String TAG = "CAM_UI"; private static final int UPDATE_TRANSFORM_MATRIX = 1; + private static final int DOWN_SAMPLE_FACTOR = 4; + private final AnimationManager mAnimationManager; private CameraActivity mActivity; private PhotoController mController; private PreviewGestures mGestures; @@ -108,8 +110,7 @@ public class PhotoUI implements PieListener, private float mSurfaceTextureUncroppedWidth; private float mSurfaceTextureUncroppedHeight; - private View mPreviewThumb; - private ObjectAnimator mFlashAnim; + private ImageView mPreviewThumb; private View mFlashOverlay; private SurfaceTextureSizeChangedListener mSurfaceTextureSizeListener; @@ -156,25 +157,25 @@ public class PhotoUI implements PieListener, } }; - private ValueAnimator.AnimatorListener mAnimatorListener = - new ValueAnimator.AnimatorListener() { + private class DecodeTask extends AsyncTask<Integer, Void, Bitmap> { + private final byte [] mData; - @Override - public void onAnimationCancel(Animator arg0) {} - - @Override - public void onAnimationEnd(Animator arg0) { - mFlashOverlay.setAlpha(0f); - mFlashOverlay.setVisibility(View.GONE); - mFlashAnim.removeListener(this); + public DecodeTask(byte[] data) { + mData = data; } @Override - public void onAnimationRepeat(Animator arg0) {} + protected Bitmap doInBackground(Integer... params) { + // Decode image in background. + return Util.downSample(mData, DOWN_SAMPLE_FACTOR); + } @Override - public void onAnimationStart(Animator arg0) {} - }; + protected void onPostExecute(Bitmap bitmap) { + mPreviewThumb.setImageBitmap(bitmap); + mAnimationManager.startCaptureAnimation(mPreviewThumb); + } + } public PhotoUI(CameraActivity activity, PhotoController controller, View parent) { mActivity = activity; @@ -208,6 +209,7 @@ public class PhotoUI implements PieListener, } mCameraControls = (CameraControls) mRootView.findViewById(R.id.camera_controls); ((CameraRootView) mRootView).setDisplayChangeListener(this); + mAnimationManager = new AnimationManager(); } public void onScreenSizeChanged(int width, int height, int previewWidth, int previewHeight) { @@ -328,6 +330,12 @@ public class PhotoUI implements PieListener, updateOnScreenIndicators(params, prefGroup, prefs); } + public void animateCapture(final byte[] jpegData) { + // Decode jpeg byte array and then animate the jpeg + DecodeTask task = new DecodeTask(jpegData); + task.execute(); + } + private void openMenu() { if (mPieRenderer != null) { // If autofocus is not finished, cancel autofocus so that the @@ -341,7 +349,7 @@ public class PhotoUI implements PieListener, public void initializeControlByIntent() { mBlocker = mRootView.findViewById(R.id.blocker); - mPreviewThumb = mRootView.findViewById(R.id.preview_thumb); + mPreviewThumb = (ImageView) mRootView.findViewById(R.id.preview_thumb); mPreviewThumb.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -498,16 +506,7 @@ public class PhotoUI implements PieListener, } public void animateFlash() { - // End the previous animation if the previous one is still running - if (mFlashAnim != null && mFlashAnim.isRunning()) { - mFlashAnim.end(); - } - // Start new flash animation. - mFlashOverlay.setVisibility(View.VISIBLE); - mFlashAnim = ObjectAnimator.ofFloat((Object) mFlashOverlay, "alpha", 0.3f, 0f); - mFlashAnim.setDuration(300); - mFlashAnim.addListener(mAnimatorListener); - mFlashAnim.start(); + mAnimationManager.startFlashAnimation(mFlashOverlay); } public void enableGestures(boolean enable) { @@ -570,14 +569,6 @@ public class PhotoUI implements PieListener, if (!toCamera && mCountDownView != null) mCountDownView.cancelCountDown(); } - public void enablePreviewThumb(boolean enabled) { - if (enabled) { - mPreviewThumb.setVisibility(View.VISIBLE); - } else { - mPreviewThumb.setVisibility(View.GONE); - } - } - public boolean removeTopLevelPopup() { // Remove the top level popup or dialog box and return true if there's any if (mPopup != null) { |