Merge "Simplify and smooth notification panel animation." into honeycomb
This commit is contained in:
committed by
Android (Google) Code Review
commit
4e10c2b9d7
@@ -18,20 +18,13 @@
|
|||||||
<com.android.systemui.statusbar.tablet.NotificationPanel
|
<com.android.systemui.statusbar.tablet.NotificationPanel
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
|
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
|
||||||
|
android:id="@+id/panel_root"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:gravity="right"
|
android:gravity="right"
|
||||||
|
android:background="@drawable/notify_panel_bg_protect_tiled"
|
||||||
>
|
>
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/scrim"
|
|
||||||
android:background="@drawable/notify_panel_bg_protect_tiled"
|
|
||||||
android:layout_width="512dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/content_parent"
|
android:id="@+id/content_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -88,7 +81,7 @@
|
|||||||
android:layout_alignTop="@id/content_parent"
|
android:layout_alignTop="@id/content_parent"
|
||||||
android:layout_alignLeft="@id/content_parent"
|
android:layout_alignLeft="@id/content_parent"
|
||||||
android:layout_marginLeft="100dip"
|
android:layout_marginLeft="100dip"
|
||||||
android:layout_marginTop="-100dip"
|
android:layout_marginTop="50dip"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</com.android.systemui.statusbar.tablet.NotificationPanel>
|
</com.android.systemui.statusbar.tablet.NotificationPanel>
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel,
|
|||||||
ViewGroup mContentFrame;
|
ViewGroup mContentFrame;
|
||||||
Rect mContentArea = new Rect();
|
Rect mContentArea = new Rect();
|
||||||
View mSettingsView;
|
View mSettingsView;
|
||||||
View mScrim, mGlow;
|
View mGlow;
|
||||||
ViewGroup mContentParent;
|
ViewGroup mContentParent;
|
||||||
|
|
||||||
Choreographer mChoreo = new Choreographer();
|
Choreographer mChoreo = new Choreographer();
|
||||||
@@ -79,7 +79,6 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel,
|
|||||||
mModeToggle = findViewById(R.id.mode_toggle);
|
mModeToggle = findViewById(R.id.mode_toggle);
|
||||||
mModeToggle.setOnClickListener(this);
|
mModeToggle.setOnClickListener(this);
|
||||||
|
|
||||||
mScrim = findViewById(R.id.scrim);
|
|
||||||
mGlow = findViewById(R.id.glow);
|
mGlow = findViewById(R.id.glow);
|
||||||
|
|
||||||
mSettingsButton = (ImageView)findViewById(R.id.settings_button);
|
mSettingsButton = (ImageView)findViewById(R.id.settings_button);
|
||||||
@@ -192,18 +191,21 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel,
|
|||||||
AnimatorSet mContentAnim;
|
AnimatorSet mContentAnim;
|
||||||
|
|
||||||
// should group this into a multi-property animation
|
// should group this into a multi-property animation
|
||||||
final int OPEN_DURATION = 136;
|
final int OPEN_DURATION = 250;
|
||||||
final int CLOSE_DURATION = 250;
|
final int CLOSE_DURATION = 250;
|
||||||
|
|
||||||
// the panel will start to appear this many px from the end
|
// the panel will start to appear this many px from the end
|
||||||
final int HYPERSPACE_OFFRAMP = 30;
|
final int HYPERSPACE_OFFRAMP = 100;
|
||||||
|
|
||||||
Choreographer() {
|
Choreographer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void createAnimation(boolean appearing) {
|
void createAnimation(boolean appearing) {
|
||||||
Animator bgAnim = ObjectAnimator.ofFloat(mScrim,
|
// mVisible: previous state; appearing: new state
|
||||||
"alpha", mScrim.getAlpha(), appearing ? 1 : 0);
|
|
||||||
|
View root = findViewById(R.id.panel_root);
|
||||||
|
Animator bgAnim = ObjectAnimator.ofInt(root.getBackground(), "alpha",
|
||||||
|
mVisible ? 255 : 0, appearing ? 255 : 0);
|
||||||
|
|
||||||
float start, end;
|
float start, end;
|
||||||
|
|
||||||
@@ -213,34 +215,33 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel,
|
|||||||
if (appearing) {
|
if (appearing) {
|
||||||
// we want to go from near-the-top to the top, unless we're half-open in the right
|
// we want to go from near-the-top to the top, unless we're half-open in the right
|
||||||
// general vicinity
|
// general vicinity
|
||||||
start = (y < HYPERSPACE_OFFRAMP)
|
start = (y < HYPERSPACE_OFFRAMP) ? y : HYPERSPACE_OFFRAMP;
|
||||||
? y
|
|
||||||
: HYPERSPACE_OFFRAMP;
|
|
||||||
end = 0;
|
end = 0;
|
||||||
} else {
|
} else {
|
||||||
start = y;
|
start = y;
|
||||||
end = y + HYPERSPACE_OFFRAMP;
|
end = y + HYPERSPACE_OFFRAMP;
|
||||||
}
|
}
|
||||||
Animator posAnim = ObjectAnimator.ofFloat(mContentParent, "translationY", start, end);
|
Animator posAnim = ObjectAnimator.ofFloat(mContentParent, "translationY",
|
||||||
|
start, end);
|
||||||
posAnim.setInterpolator(appearing
|
posAnim.setInterpolator(appearing
|
||||||
? new android.view.animation.DecelerateInterpolator(2.0f)
|
? new android.view.animation.DecelerateInterpolator(1.0f)
|
||||||
: new android.view.animation.AccelerateInterpolator(2.0f));
|
: new android.view.animation.AccelerateInterpolator(1.0f));
|
||||||
|
|
||||||
Animator glowAnim = ObjectAnimator.ofFloat(mGlow, "alpha",
|
Animator glowAnim = ObjectAnimator.ofInt(mGlow.getBackground(), "alpha",
|
||||||
mGlow.getAlpha(), appearing ? 1.0f : 0.0f);
|
mVisible ? 255 : 0, appearing ? 255 : 0);
|
||||||
glowAnim.setInterpolator(appearing
|
glowAnim.setInterpolator(appearing
|
||||||
? new android.view.animation.AccelerateInterpolator(1.0f)
|
? new android.view.animation.AccelerateInterpolator(1.0f)
|
||||||
: new android.view.animation.DecelerateInterpolator(1.0f));
|
: new android.view.animation.DecelerateInterpolator(1.0f));
|
||||||
|
|
||||||
mContentAnim = new AnimatorSet();
|
mContentAnim = new AnimatorSet();
|
||||||
mContentAnim
|
mContentAnim
|
||||||
.play(ObjectAnimator.ofFloat(mContentParent, "alpha", mContentParent.getAlpha(),
|
.play(ObjectAnimator.ofFloat(mContentParent, "alpha",
|
||||||
appearing ? 1.0f : 0.0f))
|
mContentParent.getAlpha(), appearing ? 1.0f : 0.0f))
|
||||||
.with(glowAnim)
|
|
||||||
.with(bgAnim)
|
.with(bgAnim)
|
||||||
|
.with(glowAnim)
|
||||||
.with(posAnim)
|
.with(posAnim)
|
||||||
;
|
;
|
||||||
mContentAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
|
mContentAnim.setDuration((DEBUG?10:1)*(appearing ? OPEN_DURATION : CLOSE_DURATION));
|
||||||
mContentAnim.addListener(this);
|
mContentAnim.addListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,13 +251,13 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel,
|
|||||||
createAnimation(appearing);
|
createAnimation(appearing);
|
||||||
|
|
||||||
mContentParent.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
mContentParent.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||||
|
mGlow.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||||
mContentAnim.start();
|
mContentAnim.start();
|
||||||
|
|
||||||
mVisible = appearing;
|
mVisible = appearing;
|
||||||
}
|
}
|
||||||
|
|
||||||
void jumpTo(boolean appearing) {
|
void jumpTo(boolean appearing) {
|
||||||
// setBgAlpha(appearing ? 255 : 0);
|
|
||||||
mContentParent.setTranslationY(appearing ? 0 : mPanelHeight);
|
mContentParent.setTranslationY(appearing ? 0 : mPanelHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,6 +287,7 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel,
|
|||||||
setVisibility(View.GONE);
|
setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
mContentParent.setLayerType(View.LAYER_TYPE_NONE, null);
|
mContentParent.setLayerType(View.LAYER_TYPE_NONE, null);
|
||||||
|
mGlow.setLayerType(View.LAYER_TYPE_NONE, null);
|
||||||
mContentAnim = null;
|
mContentAnim = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ public class TabletStatusBar extends StatusBar implements
|
|||||||
mStatusBarView.setIgnoreChildren(0, mNotificationTrigger, mNotificationPanel);
|
mStatusBarView.setIgnoreChildren(0, mNotificationTrigger, mNotificationPanel);
|
||||||
|
|
||||||
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
|
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
|
||||||
720, // ViewGroup.LayoutParams.MATCH_PARENT,
|
512, // ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL,
|
WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL,
|
||||||
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
|
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
|
||||||
|
|||||||
Reference in New Issue
Block a user