diff options
author | John Reck <jreck@google.com> | 2013-02-01 01:32:42 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-02-01 01:32:42 +0000 |
commit | 8052651774e5a4f68f9ea3e79319e59eafd354cc (patch) | |
tree | efb1ff179b680cab5029c12d137a3c84d0b4b745 /src | |
parent | 865c12a79c5ab045d689c26be621d53586ee2a05 (diff) | |
parent | e319aeabdc825f221df5af8a6ec080c6f5d41a94 (diff) | |
download | android_packages_apps_Snap-8052651774e5a4f68f9ea3e79319e59eafd354cc.tar.gz android_packages_apps_Snap-8052651774e5a4f68f9ea3e79319e59eafd354cc.tar.bz2 android_packages_apps_Snap-8052651774e5a4f68f9ea3e79319e59eafd354cc.zip |
Merge "Animate between photo modules" into gb-ub-photos-bryce
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 87 | ||||
-rw-r--r-- | src/com/android/camera/CameraScreenNail.java | 28 |
2 files changed, 95 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(); diff --git a/src/com/android/camera/CameraScreenNail.java b/src/com/android/camera/CameraScreenNail.java index 5d3c5c092..d531f4adf 100644 --- a/src/com/android/camera/CameraScreenNail.java +++ b/src/com/android/camera/CameraScreenNail.java @@ -90,6 +90,8 @@ public class CameraScreenNail extends SurfaceTextureScreenNail { } }; private DrawClient mDraw = mDefaultDraw; + private float mAlpha = 1f; + private Runnable mOnFrameDrawnListener; public interface Listener { void requestRender(); @@ -338,6 +340,12 @@ public class CameraScreenNail extends SurfaceTextureScreenNail { if (mDraw.requiresSurfaceTexture() && (surfaceTexture == null || !mFirstFrameArrived)) { return; } + if (mOnFrameDrawnListener != null) { + mOnFrameDrawnListener.run(); + mOnFrameDrawnListener = null; + } + float oldAlpha = canvas.getAlpha(); + canvas.setAlpha(mAlpha); switch (mAnimState) { case ANIM_NONE: @@ -393,6 +401,7 @@ public class CameraScreenNail extends SurfaceTextureScreenNail { directDraw(canvas, x, y, width, height); } } + canvas.setAlpha(oldAlpha); callbackIfNeeded(); } // mLock } @@ -494,4 +503,23 @@ public class CameraScreenNail extends SurfaceTextureScreenNail { } } } + + public void setOnFrameDrawnOneShot(Runnable run) { + synchronized (mLock) { + mOnFrameDrawnListener = run; + } + } + + public float getAlpha() { + synchronized (mLock) { + return mAlpha; + } + } + + public void setAlpha(float alpha) { + synchronized (mLock) { + mAlpha = alpha; + mListener.requestRender(); + } + } } |