summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2013-02-01 01:32:42 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-02-01 01:32:42 +0000
commit8052651774e5a4f68f9ea3e79319e59eafd354cc (patch)
treeefb1ff179b680cab5029c12d137a3c84d0b4b745 /src
parent865c12a79c5ab045d689c26be621d53586ee2a05 (diff)
parente319aeabdc825f221df5af8a6ec080c6f5d41a94 (diff)
downloadandroid_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.java87
-rw-r--r--src/com/android/camera/CameraScreenNail.java28
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();
+ }
+ }
}