smooth navscreen animation
Change-Id: I87bfba8a18a1aaeffa95d15e4ddb4313dd2752d9
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index f2ace49..b2435a3 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -46,6 +46,7 @@
boolean mExtendedMenuOpen;
boolean mOptionsMenuOpen;
+ boolean mAnimating;
/**
* @param browser
@@ -304,8 +305,18 @@
}
void showNavScreen() {
- captureTab(mActiveTab);
+ if (mAnimating) return;
+ mAnimating = true;
mNavScreen = new NavScreen(mActivity, mUiController, this);
+ mNavScreen.startTask(new Runnable() {
+ public void run() {
+ BrowserWebView web = (BrowserWebView) getWebView();
+ if (web != null) {
+ mActiveTab.setScreenshot(web.capture());
+ }
+ mNavScreen.finishTask();
+ }
+ });
WebView web = getWebView();
if (web != null) {
int w = web.getWidth();
@@ -315,6 +326,7 @@
}
// Add the custom view to its container.
mCustomViewContainer.addView(mNavScreen, COVER_SCREEN_GRAVITY_CENTER);
+ mContentView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ObjectAnimator animx = ObjectAnimator.ofFloat(mContentView,
"scaleX", 1.0f, 0.85f);
ObjectAnimator animy = ObjectAnimator.ofFloat(mContentView,
@@ -325,7 +337,6 @@
@Override
public void onAnimationCancel(Animator animation) {
- finishShowNavScreen();
}
@Override
@@ -347,16 +358,21 @@
private void finishShowNavScreen() {
// Hide the content view.
+ mContentView.setLayerType(View.LAYER_TYPE_NONE, null);
mContentView.setVisibility(View.GONE);
mContentView.setScaleX(1.0f);
mContentView.setScaleY(1.0f);
+ mNavScreen.waitForTask();
// Finally show the custom view container.
mCustomViewContainer.setVisibility(View.VISIBLE);
mCustomViewContainer.bringToFront();
+ mAnimating = false;
}
void hideNavScreen(boolean animateToPage) {
- if (mNavScreen == null) return;
+ if (mAnimating || mNavScreen == null) return;
+ mAnimating = true;
+ mNavScreen.setLayerType(View.LAYER_TYPE_HARDWARE, null);
if (animateToPage) {
ObjectAnimator animx = ObjectAnimator.ofFloat(mNavScreen, "scaleX",
1.0f, 1.2f);
@@ -368,7 +384,6 @@
@Override
public void onAnimationCancel(Animator animation) {
- finishHideNavScreen();
}
@Override
@@ -395,12 +410,14 @@
private void finishHideNavScreen() {
// Hide the custom view.
mNavScreen.setVisibility(View.GONE);
+ mNavScreen.setLayerType(View.LAYER_TYPE_NONE, null);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mNavScreen);
mNavScreen = null;
mCustomViewContainer.setVisibility(View.GONE);
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
+ mAnimating = false;
}
}