diff options
| author | 2011-09-02 13:14:18 -0700 | |
|---|---|---|
| committer | 2011-09-02 13:14:18 -0700 | |
| commit | 016671fb46e247fbec2067ff9f9be417304ae0a2 (patch) | |
| tree | 9924f8b595bafd487de912edc6ae0ceda2dffa88 | |
| parent | d9facff585b52630203836bf50b873e52a083c24 (diff) | |
| parent | 41bff38d3060dbcb55133cedaf5d962c3082efc2 (diff) | |
Merge "Tweaks to NotificationPanel animation"
| -rw-r--r-- | graphics/java/android/graphics/drawable/ColorDrawable.java | 5 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java | 43 |
2 files changed, 35 insertions, 13 deletions
diff --git a/graphics/java/android/graphics/drawable/ColorDrawable.java b/graphics/java/android/graphics/drawable/ColorDrawable.java index 4418e02a89f5..88c91559dcbb 100644 --- a/graphics/java/android/graphics/drawable/ColorDrawable.java +++ b/graphics/java/android/graphics/drawable/ColorDrawable.java @@ -111,8 +111,11 @@ public class ColorDrawable extends Drawable { alpha += alpha >> 7; // make it 0..256 int baseAlpha = mState.mBaseColor >>> 24; int useAlpha = baseAlpha * alpha >> 8; + int oldUseColor = mState.mUseColor; mState.mUseColor = (mState.mBaseColor << 8 >>> 8) | (useAlpha << 24); - invalidateSelf(); + if (oldUseColor != mState.mUseColor) { + invalidateSelf(); + } } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java index d9cb4e8678b9..4a1cafdcce6e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java @@ -28,6 +28,10 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; import android.widget.RelativeLayout; import com.android.systemui.R; @@ -52,6 +56,8 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, ViewGroup mContentParent; TabletStatusBar mBar; View mClearButton; + static Interpolator sAccelerateInterpolator = new AccelerateInterpolator(); + static Interpolator sDecelerateInterpolator = new DecelerateInterpolator(); // amount to slide mContentParent down by when mContentFrame is missing float mContentFrameMissingTranslation; @@ -117,8 +123,13 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, mShowing = show; if (show) { setVisibility(View.VISIBLE); + // Don't start the animation until we've created the layer, which is done + // right before we are drawn + mContentParent.setLayerType(View.LAYER_TYPE_HARDWARE, null); + getViewTreeObserver().addOnPreDrawListener(mPreDrawListener); + } else { + mChoreo.startAnimation(show); } - mChoreo.startAnimation(show); } } else { mShowing = show; @@ -127,6 +138,20 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, } /** + * This is used only when we've created a hardware layer and are waiting until it's + * been created in order to start the appearing animation. + */ + private ViewTreeObserver.OnPreDrawListener mPreDrawListener = + new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + getViewTreeObserver().removeOnPreDrawListener(this); + mChoreo.startAnimation(true); + return true; + } + }; + + /** * Whether the panel is showing, or, if it's animating, whether it will be * when the animation is done. */ @@ -330,8 +355,8 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, AnimatorSet mContentAnim; // should group this into a multi-property animation - final static int OPEN_DURATION = 300; - final static int CLOSE_DURATION = 300; + final static int OPEN_DURATION = 250; + final static int CLOSE_DURATION = 250; // the panel will start to appear this many px from the end final int HYPERSPACE_OFFRAMP = 200; @@ -362,19 +387,15 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, Animator posAnim = ObjectAnimator.ofFloat(mContentParent, "translationY", start, end); - posAnim.setInterpolator(appearing - ? new android.view.animation.DecelerateInterpolator(1.0f) - : new android.view.animation.AccelerateInterpolator(1.0f)); + posAnim.setInterpolator(appearing ? sDecelerateInterpolator : sAccelerateInterpolator); if (mContentAnim != null && mContentAnim.isRunning()) { mContentAnim.cancel(); } Animator fadeAnim = ObjectAnimator.ofFloat(mContentParent, "alpha", - mContentParent.getAlpha(), appearing ? 1.0f : 0.0f); - fadeAnim.setInterpolator(appearing - ? new android.view.animation.AccelerateInterpolator(2.0f) - : new android.view.animation.DecelerateInterpolator(2.0f)); + appearing ? 1.0f : 0.0f); + fadeAnim.setInterpolator(appearing ? sAccelerateInterpolator : sDecelerateInterpolator); mContentAnim = new AnimatorSet(); mContentAnim @@ -389,8 +410,6 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, if (DEBUG) Slog.d(TAG, "startAnimation(appearing=" + appearing + ")"); createAnimation(appearing); - - mContentParent.setLayerType(View.LAYER_TYPE_HARDWARE, null); mContentAnim.start(); mVisible = appearing; |