diff options
Diffstat (limited to 'src/com/android/camera/CameraActivity.java')
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 87 |
1 files changed, 67 insertions, 20 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index d79832b7d..9f9f1b652 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -16,6 +16,9 @@ package com.android.camera; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; @@ -132,34 +135,78 @@ public class CameraActivity extends ActivityBase } } + private ObjectAnimator mCameraSwitchAnimator; + @Override - public void onCameraSelected(int i) { + public void onCameraSelected(final int i) { if (mPaused) return; if (i != mCurrentModuleIndex) { mPaused = true; - boolean canReuse = canReuseScreenNail(); - CameraHolder.instance().keep(); - closeModule(mCurrentModule); - mCurrentModuleIndex = i; - switch (i) { - case VIDEO_MODULE_INDEX: - mCurrentModule = new VideoModule(); - break; - case PHOTO_MODULE_INDEX: - mCurrentModule = new PhotoModule(); - break; - case PANORAMA_MODULE_INDEX: - mCurrentModule = new PanoramaModule(); - break; - case LIGHTCYCLE_MODULE_INDEX: - mCurrentModule = LightCycleHelper.createPanoramaModule(); - break; + CameraScreenNail screenNail = getCameraScreenNail(); + if (screenNail != null) { + if (mCameraSwitchAnimator != null && mCameraSwitchAnimator.isRunning()) { + mCameraSwitchAnimator.cancel(); + } + mCameraSwitchAnimator = ObjectAnimator.ofFloat( + screenNail, "alpha", screenNail.getAlpha(), 0f); + mCameraSwitchAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + doChangeCamera(i); + } + }); + mCameraSwitchAnimator.start(); + } else { + doChangeCamera(i); } - openModule(mCurrentModule, canReuse); - mCurrentModule.onOrientationChanged(mLastRawOrientation); } } + private void doChangeCamera(int i) { + boolean canReuse = canReuseScreenNail(); + CameraHolder.instance().keep(); + closeModule(mCurrentModule); + mCurrentModuleIndex = i; + switch (i) { + case VIDEO_MODULE_INDEX: + mCurrentModule = new VideoModule(); + break; + case PHOTO_MODULE_INDEX: + mCurrentModule = new PhotoModule(); + break; + case PANORAMA_MODULE_INDEX: + mCurrentModule = new PanoramaModule(); + break; + case LIGHTCYCLE_MODULE_INDEX: + mCurrentModule = LightCycleHelper.createPanoramaModule(); + break; + } + openModule(mCurrentModule, canReuse); + mCurrentModule.onOrientationChanged(mLastRawOrientation); + getCameraScreenNail().setAlpha(0f); + getCameraScreenNail().setOnFrameDrawnOneShot(mOnFrameDrawn); + } + + private Runnable mOnFrameDrawn = new Runnable() { + + @Override + public void run() { + runOnUiThread(mFadeInCameraScreenNail); + } + }; + + private Runnable mFadeInCameraScreenNail = new Runnable() { + + @Override + public void run() { + mCameraSwitchAnimator = ObjectAnimator.ofFloat( + getCameraScreenNail(), "alpha", 0f, 1f); + mCameraSwitchAnimator.setStartDelay(50); + mCameraSwitchAnimator.start(); + } + }; + @Override public void onShowSwitcherPopup() { mCurrentModule.onShowSwitcherPopup(); |