diff options
author | Tony Wickham <twickham@google.com> | 2018-04-19 11:39:34 -0700 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2018-05-09 12:33:46 -0700 |
commit | 6becf7c07d4714369d40dcd575a99855894c0f8a (patch) | |
tree | 3c00366778c8ff372719ec58769648e4bb0a3a36 /src/com/android/launcher3/WorkspaceStateTransitionAnimation.java | |
parent | 639b07178f6412cd931818c7787c5f6effd42317 (diff) | |
download | android_packages_apps_Trebuchet-6becf7c07d4714369d40dcd575a99855894c0f8a.tar.gz android_packages_apps_Trebuchet-6becf7c07d4714369d40dcd575a99855894c0f8a.tar.bz2 android_packages_apps_Trebuchet-6becf7c07d4714369d40dcd575a99855894c0f8a.zip |
Add atomic recents animation while swiping up
State handlers can now specify atomic and non-atomic components of
their animations to states, which can be specified when creating a
new animation. There is now one atomic animation, when going from
NORMAL to OVERVIEW (and in reverse):
- RecentsViewStateController's animation (scale/alpha) is all atomic
- WorkspaceStateTransitionAnimation has atomic and non-atomic:
- Hotseat and workspace alpha is atomic, as is workspace scale
- Everything else (scrim, translation, qsb and drag handle alpha) is
non-atomic
- All apps progress is non-atomic
Also simplified dragging through overview; no longer pulls against you,
so we use an OvershootInterpolator when flinging instead of our custom
interpolator for the spring effect.
Bug: 76449024
Bug: 78089840
Change-Id: Iafac84d0c2b99ee9cf9dd5b30e2218286713b449
Diffstat (limited to 'src/com/android/launcher3/WorkspaceStateTransitionAnimation.java')
-rw-r--r-- | src/com/android/launcher3/WorkspaceStateTransitionAnimation.java | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index 8d3d459cc..55968db02 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -24,6 +24,7 @@ import static com.android.launcher3.LauncherState.HOTSEAT_SEARCH_BOX; import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER; import android.view.View; +import android.view.animation.Interpolator; import com.android.launcher3.LauncherState.PageAlphaProvider; import com.android.launcher3.LauncherStateManager.AnimationConfig; @@ -48,12 +49,12 @@ public class WorkspaceStateTransitionAnimation { } public void setState(LauncherState toState) { - setWorkspaceProperty(toState, NO_ANIM_PROPERTY_SETTER); + setWorkspaceProperty(toState, NO_ANIM_PROPERTY_SETTER, new AnimationConfig()); } public void setStateWithAnimation(LauncherState toState, AnimatorSetBuilder builder, AnimationConfig config) { - setWorkspaceProperty(toState, config.getPropertySetter(builder)); + setWorkspaceProperty(toState, config.getPropertySetter(builder), config); } public float getFinalScale() { @@ -63,28 +64,40 @@ public class WorkspaceStateTransitionAnimation { /** * Starts a transition animation for the workspace. */ - private void setWorkspaceProperty(LauncherState state, PropertySetter propertySetter) { + private void setWorkspaceProperty(LauncherState state, PropertySetter propertySetter, + AnimationConfig config) { float[] scaleAndTranslation = state.getWorkspaceScaleAndTranslation(mLauncher); mNewScale = scaleAndTranslation[0]; PageAlphaProvider pageAlphaProvider = state.getWorkspacePageAlphaProvider(mLauncher); final int childCount = mWorkspace.getChildCount(); for (int i = 0; i < childCount; i++) { applyChildState(state, (CellLayout) mWorkspace.getChildAt(i), i, pageAlphaProvider, - propertySetter); + propertySetter, config); } - propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, Interpolators.ZOOM_OUT); - propertySetter.setFloat(mWorkspace, View.TRANSLATION_X, - scaleAndTranslation[1], Interpolators.ZOOM_OUT); - propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y, - scaleAndTranslation[2], Interpolators.ZOOM_OUT); int elements = state.getVisibleElements(mLauncher); - float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0; - propertySetter.setViewAlpha(mLauncher.getHotseat().getLayout(), hotseatIconsAlpha, - pageAlphaProvider.interpolator); - propertySetter.setViewAlpha(mLauncher.getWorkspace().getPageIndicator(), - hotseatIconsAlpha, pageAlphaProvider.interpolator); + boolean playAtomicComponent = config.playAtomicComponent(); + if (playAtomicComponent) { + propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, Interpolators.ZOOM_OUT); + float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0; + propertySetter.setViewAlpha(mLauncher.getHotseat().getLayout(), hotseatIconsAlpha, + pageAlphaProvider.interpolator); + propertySetter.setViewAlpha(mLauncher.getWorkspace().getPageIndicator(), + hotseatIconsAlpha, pageAlphaProvider.interpolator); + } + + if (!config.playNonAtomicComponent()) { + // Only the alpha and scale, handled above, are included in the atomic animation. + return; + } + + Interpolator translationInterpolator = !playAtomicComponent ? Interpolators.LINEAR + : Interpolators.ZOOM_OUT; + propertySetter.setFloat(mWorkspace, View.TRANSLATION_X, + scaleAndTranslation[1], translationInterpolator); + propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y, + scaleAndTranslation[2], translationInterpolator); propertySetter.setViewAlpha(mLauncher.getHotseatSearchBox(), (elements & HOTSEAT_SEARCH_BOX) != 0 ? 1 : 0, @@ -101,17 +114,22 @@ public class WorkspaceStateTransitionAnimation { public void applyChildState(LauncherState state, CellLayout cl, int childIndex) { applyChildState(state, cl, childIndex, state.getWorkspacePageAlphaProvider(mLauncher), - NO_ANIM_PROPERTY_SETTER); + NO_ANIM_PROPERTY_SETTER, new AnimationConfig()); } private void applyChildState(LauncherState state, CellLayout cl, int childIndex, - PageAlphaProvider pageAlphaProvider, PropertySetter propertySetter) { + PageAlphaProvider pageAlphaProvider, PropertySetter propertySetter, + AnimationConfig config) { float pageAlpha = pageAlphaProvider.getPageAlpha(childIndex); int drawableAlpha = Math.round(pageAlpha * (state.hasWorkspacePageBackground ? 255 : 0)); - propertySetter.setInt(cl.getScrimBackground(), - DRAWABLE_ALPHA, drawableAlpha, Interpolators.ZOOM_OUT); - propertySetter.setFloat(cl.getShortcutsAndWidgets(), View.ALPHA, - pageAlpha, pageAlphaProvider.interpolator); + if (config.playNonAtomicComponent()) { + propertySetter.setInt(cl.getScrimBackground(), + DRAWABLE_ALPHA, drawableAlpha, Interpolators.ZOOM_OUT); + } + if (config.playAtomicComponent()) { + propertySetter.setFloat(cl.getShortcutsAndWidgets(), View.ALPHA, + pageAlpha, pageAlphaProvider.interpolator); + } } }
\ No newline at end of file |