diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2017-10-26 15:36:10 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2017-10-26 16:38:55 -0700 |
commit | 5bc6b6f14c676e7528be62e1355a4dec3d783524 (patch) | |
tree | 4923c690c29907b54f8f27a444fe0c61bb78408a /src | |
parent | d4ece005e43a39af08a17acc9ad801729a5dc9d4 (diff) | |
download | packages_apps_Trebuchet-5bc6b6f14c676e7528be62e1355a4dec3d783524.tar.gz packages_apps_Trebuchet-5bc6b6f14c676e7528be62e1355a4dec3d783524.tar.bz2 packages_apps_Trebuchet-5bc6b6f14c676e7528be62e1355a4dec3d783524.zip |
Consolidating various interpolators
Change-Id: I9588eee3552001b162a1e8d5ccefcfb44d221880
Diffstat (limited to 'src')
22 files changed, 152 insertions, 189 deletions
diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index 6f404086b..d8c4efaa4 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -37,10 +37,9 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; -import android.view.animation.DecelerateInterpolator; -import android.view.animation.LinearInterpolator; import android.widget.TextView; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.dragndrop.DragController; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.dragndrop.DragOptions; @@ -240,8 +239,7 @@ public abstract class ButtonDropTarget extends TextView }; dragLayer.animateView(d.dragView, from, to, scale, 1f, 1f, 0.1f, 0.1f, DRAG_VIEW_DROP_DURATION, - new DecelerateInterpolator(2), - new LinearInterpolator(), onAnimationEndRunnable, + Interpolators.DEACCEL_2, Interpolators.LINEAR, onAnimationEndRunnable, DragLayer.ANIMATION_END_DISAPPEAR, null); } diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 2ab08b2eb..3162286c1 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -44,12 +44,13 @@ import android.view.View; import android.view.ViewDebug; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; -import android.view.animation.DecelerateInterpolator; + import com.android.launcher3.BubbleTextView.BubbleTextShadowHandler; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.accessibility.DragAndDropAccessibilityDelegate; import com.android.launcher3.accessibility.FolderAccessibilityHelper; import com.android.launcher3.accessibility.WorkspaceAccessibilityHelper; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.anim.PropertyListBuilder; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.PreviewBackground; @@ -59,6 +60,7 @@ import com.android.launcher3.util.GridOccupancy; import com.android.launcher3.util.ParcelableSparseArray; import com.android.launcher3.util.Themes; import com.android.launcher3.util.Thunk; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; @@ -223,7 +225,7 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { mReorderPreviewAnimationMagnitude = (REORDER_PREVIEW_MAGNITUDE * grid.iconSizePx); // Initialize the data structures used for the drag visualization. - mEaseOutInterpolator = new DecelerateInterpolator(2.5f); // Quint ease out + mEaseOutInterpolator = Interpolators.DEACCEL_2_5; // Quint ease out mDragCell[0] = mDragCell[1] = -1; for (int i = 0; i < mDragOutlines.length; i++) { mDragOutlines[i] = new Rect(-1, -1, -1, -1); diff --git a/src/com/android/launcher3/DropTargetBar.java b/src/com/android/launcher3/DropTargetBar.java index 2f8374a5e..3eca5cd44 100644 --- a/src/com/android/launcher3/DropTargetBar.java +++ b/src/com/android/launcher3/DropTargetBar.java @@ -26,9 +26,9 @@ import android.view.View; import android.view.ViewDebug; import android.view.ViewGroup; import android.view.ViewPropertyAnimator; -import android.view.animation.AccelerateInterpolator; import android.widget.LinearLayout; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.dragndrop.DragController; import com.android.launcher3.dragndrop.DragOptions; @@ -40,7 +40,7 @@ import java.util.ArrayList; public class DropTargetBar extends LinearLayout implements DragController.DragListener { protected static final int DEFAULT_DRAG_FADE_DURATION = 175; - protected static final TimeInterpolator DEFAULT_INTERPOLATOR = new AccelerateInterpolator(); + protected static final TimeInterpolator DEFAULT_INTERPOLATOR = Interpolators.ACCEL; private final Runnable mFadeAnimationEndRunnable = new Runnable() { diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index f55455b7e..4240a30b4 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -46,6 +46,7 @@ import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.Interpolator; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.anim.PropertyListBuilder; import com.android.launcher3.pageindicators.PageIndicator; import com.android.launcher3.touch.OverScroll; @@ -214,7 +215,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc */ protected void init() { mScroller = new LauncherScroller(getContext()); - setDefaultInterpolator(new ScrollInterpolator()); + setDefaultInterpolator(Interpolators.SCROLL); mCurrentPage = 0; final ViewConfiguration configuration = ViewConfiguration.get(getContext()); @@ -1766,16 +1767,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc return PAGE_SNAP_ANIMATION_DURATION; } - public static class ScrollInterpolator implements Interpolator { - public ScrollInterpolator() { - } - - public float getInterpolation(float t) { - t -= 1.0f; - return t*t*t*t*t + 1; - } - } - // We want the duration of the page snap animation to be influenced by the distance that // the screen has to travel, however, we don't want this duration to be effected in a // purely linear fashion. Instead, we use this method to moderate the effect that the distance diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 900e5bfa9..b0a33c8bd 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -16,8 +16,8 @@ package com.android.launcher3; -import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY; import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS; +import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY; import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_TRANSITION_MS; import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; @@ -56,8 +56,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewDebug; import android.view.ViewGroup; -import android.view.animation.DecelerateInterpolator; -import android.view.animation.Interpolator; import android.widget.Toast; import com.android.launcher3.Launcher.LauncherOverlay; @@ -68,6 +66,7 @@ import com.android.launcher3.accessibility.OverviewAccessibilityDelegate; import com.android.launcher3.accessibility.OverviewScreenAccessibilityDelegate; import com.android.launcher3.accessibility.WorkspaceAccessibilityHelper; import com.android.launcher3.anim.AnimationLayerSet; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.badge.FolderBadgeInfo; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.config.FeatureFlags; @@ -1163,8 +1162,6 @@ public class Workspace extends PagedView super.shouldFlingForVelocity(velocityX); } - private final Interpolator mAlphaInterpolator = new DecelerateInterpolator(3f); - /** * The overlay scroll is being controlled locally, just update our overlay effect */ @@ -1189,7 +1186,7 @@ public class Workspace extends PagedView scroll = Math.max(scroll - offset, 0); scroll = Math.min(1, scroll / (1 - offset)); - float alpha = 1 - mAlphaInterpolator.getInterpolation(scroll); + float alpha = 1 - Interpolators.DEACCEL_3.getInterpolation(scroll); float transX = mLauncher.getDragLayer().getMeasuredWidth() * scroll; transX *= 1 - slip; @@ -1541,7 +1538,7 @@ public class Workspace extends PagedView } public void snapToPageFromOverView(int whichPage) { - snapToPage(whichPage, OVERVIEW_TRANSITION_MS, new ZoomInInterpolator()); + snapToPage(whichPage, OVERVIEW_TRANSITION_MS, Interpolators.ZOOM_IN); } private void onStartStateTransition(LauncherState state) { diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index 0ccb8ad91..fcccdf985 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -30,10 +30,10 @@ import android.content.res.Resources; import android.util.Property; import android.view.View; import android.view.accessibility.AccessibilityManager; -import android.view.animation.DecelerateInterpolator; import com.android.launcher3.LauncherStateManager.AnimationConfig; import com.android.launcher3.anim.AnimationLayerSet; +import com.android.launcher3.anim.Interpolators; /** * A convenience class to update a view's visibility state after an alpha animation. @@ -86,58 +86,12 @@ class AlphaUpdateListener extends AnimatorListenerAdapter implements ValueAnimat } /** - * This interpolator emulates the rate at which the perceived scale of an object changes - * as its distance from a camera increases. When this interpolator is applied to a scale - * animation on a view, it evokes the sense that the object is shrinking due to moving away - * from the camera. - */ -class ZInterpolator implements TimeInterpolator { - private float focalLength; - - public ZInterpolator(float foc) { - focalLength = foc; - } - - public float getInterpolation(float input) { - return (1.0f - focalLength / (focalLength + input)) / - (1.0f - focalLength / (focalLength + 1.0f)); - } -} - -/** - * The exact reverse of ZInterpolator. - */ -class InverseZInterpolator implements TimeInterpolator { - private ZInterpolator zInterpolator; - public InverseZInterpolator(float foc) { - zInterpolator = new ZInterpolator(foc); - } - public float getInterpolation(float input) { - return 1 - zInterpolator.getInterpolation(1 - input); - } -} - -/** - * InverseZInterpolator compounded with an ease-out. - */ -class ZoomInInterpolator implements TimeInterpolator { - private final InverseZInterpolator inverseZInterpolator = new InverseZInterpolator(0.35f); - private final DecelerateInterpolator decelerate = new DecelerateInterpolator(3.0f); - - public float getInterpolation(float input) { - return decelerate.getInterpolation(inverseZInterpolator.getInterpolation(input)); - } -} - -/** * Manages the animations between each of the workspace states. */ public class WorkspaceStateTransitionAnimation { private static final PropertySetter NO_ANIM_PROPERTY_SETTER = new PropertySetter(); - private final ZoomInInterpolator mZoomInInterpolator = new ZoomInInterpolator(); - public final int mWorkspaceScrimAlpha; private final Launcher mLauncher; @@ -197,13 +151,13 @@ public class WorkspaceStateTransitionAnimation { propertySetter.setViewAlpha(mWorkspace.createHotseatAlphaAnimator(finalHotseatAlpha), mLauncher.getHotseat(), finalHotseatAlpha); - propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, mZoomInInterpolator); + propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, Interpolators.ZOOM_IN); propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y, - finalWorkspaceTranslationY, mZoomInInterpolator); + finalWorkspaceTranslationY, Interpolators.ZOOM_IN); // Set scrim propertySetter.setInt(mLauncher.getDragLayer().getScrim(), DRAWABLE_ALPHA, - state.hasScrim ? mWorkspaceScrimAlpha : 0, new DecelerateInterpolator(1.5f)); + state.hasScrim ? mWorkspaceScrimAlpha : 0, Interpolators.DEACCEL_1_5); } public void applyChildState(LauncherState state, CellLayout cl, int childIndex) { @@ -214,13 +168,13 @@ public class WorkspaceStateTransitionAnimation { private void applyChildState(LauncherState state, CellLayout cl, int childIndex, int centerPage, PropertySetter propertySetter) { propertySetter.setInt(cl.getScrimBackground(), - DRAWABLE_ALPHA, state.hasScrim ? 255 : 0, mZoomInInterpolator); + DRAWABLE_ALPHA, state.hasScrim ? 255 : 0, Interpolators.ZOOM_IN); // Only animate the page alpha when we actually fade pages if (mWorkspaceFadeInAdjacentScreens) { float finalAlpha = state == LauncherState.NORMAL && childIndex != centerPage ? 0 : 1f; propertySetter.setFloat(cl.getShortcutsAndWidgets(), View.ALPHA, - finalAlpha, mZoomInInterpolator); + finalAlpha, Interpolators.ZOOM_IN); } } @@ -302,7 +256,7 @@ public class WorkspaceStateTransitionAnimation { } private TimeInterpolator getFadeInterpolator(float finalAlpha) { - return finalAlpha == 0 ? new DecelerateInterpolator(2) : null; + return finalAlpha == 0 ? Interpolators.DEACCEL_2 : null; } } }
\ No newline at end of file diff --git a/src/com/android/launcher3/allapps/AllAppsCaretController.java b/src/com/android/launcher3/allapps/AllAppsCaretController.java index 583b49f7b..81d005a70 100644 --- a/src/com/android/launcher3/allapps/AllAppsCaretController.java +++ b/src/com/android/launcher3/allapps/AllAppsCaretController.java @@ -16,11 +16,10 @@ package com.android.launcher3.allapps; import android.animation.ObjectAnimator; -import android.view.animation.AnimationUtils; -import android.view.animation.Interpolator; import com.android.launcher3.Launcher; import com.android.launcher3.R; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.pageindicators.CaretDrawable; import com.android.launcher3.touch.SwipeDetector; @@ -44,13 +43,11 @@ public class AllAppsCaretController { final long caretAnimationDuration = launcher.getResources().getInteger( R.integer.config_caretAnimationDuration); - final Interpolator caretInterpolator = AnimationUtils.loadInterpolator(launcher, - android.R.interpolator.fast_out_slow_in); // We will set values later mCaretAnimator = ObjectAnimator.ofFloat(mCaretDrawable, "caretProgress", 0); mCaretAnimator.setDuration(caretAnimationDuration); - mCaretAnimator.setInterpolator(caretInterpolator); + mCaretAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); } /** diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index d62cd4b5f..31ce01338 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -2,6 +2,7 @@ package com.android.launcher3.allapps; import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; +import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity; import android.animation.Animator; import android.animation.AnimatorInflater; @@ -10,11 +11,9 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.support.animation.SpringAnimation; -import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.util.Property; import android.view.MotionEvent; import android.view.View; -import android.view.animation.AccelerateInterpolator; import android.view.animation.Interpolator; import com.android.launcher3.AbstractFloatingView; @@ -27,6 +26,7 @@ import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; import com.android.launcher3.anim.AnimationSuccessListener; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.anim.SpringAnimationHandler; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.GradientView; @@ -70,11 +70,9 @@ public class AllAppsTransitionController implements TouchController, SwipeDetect // The delay (as a % of the animation duration) to start the springs. private static final float SPRING_DELAY = 0.3f; - private final Interpolator mWorkspaceAccelnterpolator = new AccelerateInterpolator(2f); - private final Interpolator mHotseatAccelInterpolator = new AccelerateInterpolator(1.5f); - private final Interpolator mFastOutSlowInInterpolator = new FastOutSlowInInterpolator(); - private final SwipeDetector.ScrollInterpolator mScrollInterpolator - = new SwipeDetector.ScrollInterpolator(); + private final Interpolator mWorkspaceAccelnterpolator = Interpolators.ACCEL_2; + private final Interpolator mHotseatAccelInterpolator = Interpolators.ACCEL_1_5; + private final Interpolator mFastOutSlowInInterpolator = Interpolators.FAST_OUT_SLOW_IN; private static final float PARALLAX_COEFFICIENT = .125f; private static final int SINGLE_FRAME_MS = 16; @@ -396,8 +394,7 @@ public class AllAppsTransitionController implements TouchController, SwipeDetect mShiftStart = mAppsView.getTranslationY(); interpolator = mFastOutSlowInInterpolator; } else { - mScrollInterpolator.setVelocityAtZero(Math.abs(mContainerVelocity)); - interpolator = mScrollInterpolator; + interpolator = scrollInterpolatorForVelocity(mContainerVelocity); mProgress = Utilities.boundToRange( mProgress + mContainerVelocity * SINGLE_FRAME_MS / mShiftRange, 0f, 1f); outConfig.shouldPost = false; diff --git a/src/com/android/launcher3/anim/Interpolators.java b/src/com/android/launcher3/anim/Interpolators.java new file mode 100644 index 000000000..8826e64d8 --- /dev/null +++ b/src/com/android/launcher3/anim/Interpolators.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.anim; + +import android.view.animation.AccelerateInterpolator; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; +import android.view.animation.PathInterpolator; + + +/** + * Common interpolators used in Launcher + */ +public class Interpolators { + + public static final Interpolator LINEAR = new LinearInterpolator(); + + public static final Interpolator ACCEL = new AccelerateInterpolator(); + public static final Interpolator ACCEL_1_5 = new AccelerateInterpolator(1.5f); + public static final Interpolator ACCEL_2 = new AccelerateInterpolator(2); + + public static final Interpolator DEACCEL = new DecelerateInterpolator(); + public static final Interpolator DEACCEL_1_5 = new DecelerateInterpolator(1.5f); + public static final Interpolator DEACCEL_2 = new DecelerateInterpolator(2); + public static final Interpolator DEACCEL_2_5 = new DecelerateInterpolator(2.5f); + public static final Interpolator DEACCEL_3 = new DecelerateInterpolator(3f); + + public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f); + + /** + * Inversion of zInterpolate, compounded with an ease-out. + */ + public static final Interpolator ZOOM_IN = new Interpolator() { + + private static final float FOCAL_LENGTH = 0.35f; + + @Override + public float getInterpolation(float v) { + return DEACCEL_3.getInterpolation(1 - zInterpolate(1 - v)); + } + + /** + * This interpolator emulates the rate at which the perceived scale of an object changes + * as its distance from a camera increases. When this interpolator is applied to a scale + * animation on a view, it evokes the sense that the object is shrinking due to moving away + * from the camera. + */ + private float zInterpolate(float input) { + return (1.0f - FOCAL_LENGTH / (FOCAL_LENGTH + input)) / + (1.0f - FOCAL_LENGTH / (FOCAL_LENGTH + 1.0f)); + } + }; + + public static final Interpolator SCROLL = new Interpolator() { + @Override + public float getInterpolation(float t) { + t -= 1.0f; + return t*t*t*t*t + 1; + } + }; + + public static final Interpolator SCROLL_CUBIC = new Interpolator() { + @Override + public float getInterpolation(float t) { + t -= 1.0f; + return t*t*t + 1; + } + }; + + private static final float FAST_FLING_PX_MS = 10; + + public static Interpolator scrollInterpolatorForVelocity(float velocity) { + return Math.abs(velocity) > FAST_FLING_PX_MS ? SCROLL : SCROLL_CUBIC; + } +}
\ No newline at end of file diff --git a/src/com/android/launcher3/compat/AnimatorSetCompat.java b/src/com/android/launcher3/compat/AnimatorSetCompat.java index 497dd1497..667672593 100644 --- a/src/com/android/launcher3/compat/AnimatorSetCompat.java +++ b/src/com/android/launcher3/compat/AnimatorSetCompat.java @@ -21,10 +21,10 @@ import android.animation.AnimatorSet; import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.os.Build; -import android.view.animation.LinearInterpolator; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimationSuccessListener; +import com.android.launcher3.anim.Interpolators; import java.util.ArrayList; import java.util.Collections; @@ -58,7 +58,7 @@ public abstract class AnimatorSetCompat implements ValueAnimator.AnimatorUpdateL mDuration = duration; mAnimationPlayer = ValueAnimator.ofFloat(0, 1); - mAnimationPlayer.setInterpolator(new LinearInterpolator()); + mAnimationPlayer.setInterpolator(Interpolators.LINEAR); mAnimationPlayer.addUpdateListener(this); } diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java index bc5aafc0a..5b1a4dc6c 100644 --- a/src/com/android/launcher3/dragndrop/DragLayer.java +++ b/src/com/android/launcher3/dragndrop/DragLayer.java @@ -33,7 +33,6 @@ import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; -import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.widget.FrameLayout; import android.widget.TextView; @@ -48,6 +47,7 @@ import com.android.launcher3.R; import com.android.launcher3.ShortcutAndWidgetContainer; import com.android.launcher3.Utilities; import com.android.launcher3.allapps.AllAppsTransitionController; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.Folder; import com.android.launcher3.folder.FolderIcon; @@ -74,7 +74,7 @@ public class DragLayer extends InsettableFrameLayout { // Variables relating to animation of views after drop private ValueAnimator mDropAnim = null; - private final TimeInterpolator mCubicEaseOutInterpolator = new DecelerateInterpolator(1.5f); + private final TimeInterpolator mCubicEaseOutInterpolator = Interpolators.DEACCEL_1_5; @Thunk DragView mDropView = null; @Thunk int mAnchorViewInitialScrollX = 0; @Thunk View mAnchorView = null; diff --git a/src/com/android/launcher3/dragndrop/DragView.java b/src/com/android/launcher3/dragndrop/DragView.java index 17fad8496..7c89df37c 100644 --- a/src/com/android/launcher3/dragndrop/DragView.java +++ b/src/com/android/launcher3/dragndrop/DragView.java @@ -43,7 +43,6 @@ import android.support.animation.FloatPropertyCompat; import android.support.animation.SpringAnimation; import android.support.animation.SpringForce; import android.view.View; -import android.view.animation.DecelerateInterpolator; import com.android.launcher3.FastBitmapDrawable; import com.android.launcher3.ItemInfo; @@ -54,6 +53,7 @@ import com.android.launcher3.LauncherModel; import com.android.launcher3.LauncherSettings; import com.android.launcher3.R; import com.android.launcher3.Utilities; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.ShortcutConfigActivityInfo; import com.android.launcher3.config.FeatureFlags; @@ -472,7 +472,7 @@ public class DragView extends View { public void crossFade(int duration) { ValueAnimator va = LauncherAnimUtils.ofFloat(0f, 1f); va.setDuration(duration); - va.setInterpolator(new DecelerateInterpolator(1.5f)); + va.setInterpolator(Interpolators.DEACCEL_1_5); va.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java index 900781cbb..598302974 100644 --- a/src/com/android/launcher3/folder/FolderIcon.java +++ b/src/com/android/launcher3/folder/FolderIcon.java @@ -16,6 +16,9 @@ package com.android.launcher3.folder; +import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW; +import static com.android.launcher3.folder.PreviewItemManager.INITIAL_ITEM_ANIMATION_DURATION; + import android.animation.Animator; import android.animation.ObjectAnimator; import android.content.Context; @@ -33,8 +36,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.DecelerateInterpolator; import android.widget.FrameLayout; import com.android.launcher3.Alarm; @@ -56,6 +57,7 @@ import com.android.launcher3.SimpleOnStylusPressListener; import com.android.launcher3.StylusEventHelper; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.badge.BadgeRenderer; import com.android.launcher3.badge.FolderBadgeInfo; import com.android.launcher3.dragndrop.BaseItemDragListener; @@ -68,9 +70,6 @@ import com.android.launcher3.widget.PendingAddShortcutInfo; import java.util.ArrayList; import java.util.List; -import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW; -import static com.android.launcher3.folder.PreviewItemManager.INITIAL_ITEM_ANIMATION_DURATION; - /** * An icon that can appear on in the workspace representing an {@link Folder}. */ @@ -350,7 +349,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { float finalScale = scale * scaleRelativeToDragLayer; dragLayer.animateView(animateView, from, to, finalAlpha, 1, 1, finalScale, finalScale, DROP_IN_ANIMATION_DURATION, - new DecelerateInterpolator(2), new AccelerateInterpolator(2), + Interpolators.DEACCEL_2, Interpolators.ACCEL_2, null, DragLayer.ANIMATION_END_DISAPPEAR, null); mFolder.hideItem(item); diff --git a/src/com/android/launcher3/folder/FolderPagedView.java b/src/com/android/launcher3/folder/FolderPagedView.java index f4ac0a140..9e5bc4f09 100644 --- a/src/com/android/launcher3/folder/FolderPagedView.java +++ b/src/com/android/launcher3/folder/FolderPagedView.java @@ -27,7 +27,6 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewDebug; -import android.view.animation.DecelerateInterpolator; import com.android.launcher3.BubbleTextView; import com.android.launcher3.CellLayout; @@ -43,6 +42,7 @@ import com.android.launcher3.ShortcutAndWidgetContainer; import com.android.launcher3.ShortcutInfo; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace.ItemOperator; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.keyboard.ViewGroupFocusHelper; import com.android.launcher3.pageindicators.PageIndicator; import com.android.launcher3.util.Thunk; @@ -511,7 +511,7 @@ public class FolderPagedView extends PagedView { int scroll = getScrollForPage(getNextPage()) + hint; int delta = scroll - getScrollX(); if (delta != 0) { - mScroller.setInterpolator(new DecelerateInterpolator()); + mScroller.setInterpolator(Interpolators.DEACCEL); mScroller.startScroll(getScrollX(), 0, delta, 0, Folder.SCROLL_HINT_DURATION); invalidate(); } diff --git a/src/com/android/launcher3/graphics/GradientView.java b/src/com/android/launcher3/graphics/GradientView.java index 5455b43ec..bacb06323 100644 --- a/src/com/android/launcher3/graphics/GradientView.java +++ b/src/com/android/launcher3/graphics/GradientView.java @@ -29,12 +29,12 @@ import android.support.v4.graphics.ColorUtils; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.View; -import android.view.animation.AccelerateInterpolator; import android.view.animation.Interpolator; import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.dynamicui.WallpaperColorInfo; import com.android.launcher3.util.Themes; @@ -64,7 +64,7 @@ public class GradientView extends View implements WallpaperColorInfo.OnChangeLis private final int mMaskHeight, mMaskWidth; private final int mAlphaColors; private final Paint mDebugPaint = DEBUG ? new Paint() : null; - private final Interpolator mAccelerator = new AccelerateInterpolator(); + private final Interpolator mAccelerator = Interpolators.ACCEL; private final float mAlphaStart; private final WallpaperColorInfo mWallpaperColorInfo; private final int mScrimColor; diff --git a/src/com/android/launcher3/graphics/PreloadIconDrawable.java b/src/com/android/launcher3/graphics/PreloadIconDrawable.java index 06dc7acfe..6d486eed7 100644 --- a/src/com/android/launcher3/graphics/PreloadIconDrawable.java +++ b/src/com/android/launcher3/graphics/PreloadIconDrawable.java @@ -30,9 +30,9 @@ import android.graphics.PathMeasure; import android.graphics.Rect; import android.util.Property; import android.util.SparseArray; -import android.view.animation.LinearInterpolator; import com.android.launcher3.FastBitmapDrawable; +import com.android.launcher3.anim.Interpolators; import java.lang.ref.WeakReference; @@ -226,7 +226,7 @@ public class PreloadIconDrawable extends FastBitmapDrawable { mCurrentAnim = ObjectAnimator.ofFloat(this, INTERNAL_STATE, finalProgress); mCurrentAnim.setDuration( (long) ((finalProgress - mInternalStateProgress) * DURATION_SCALE)); - mCurrentAnim.setInterpolator(new LinearInterpolator()); + mCurrentAnim.setInterpolator(Interpolators.LINEAR); if (isFinish) { mCurrentAnim.addListener(new AnimatorListenerAdapter() { @Override @@ -237,7 +237,6 @@ public class PreloadIconDrawable extends FastBitmapDrawable { } mCurrentAnim.start(); } - } /** diff --git a/src/com/android/launcher3/notification/Interpolators.java b/src/com/android/launcher3/notification/Interpolators.java deleted file mode 100644 index 5c3b22ab1..000000000 --- a/src/com/android/launcher3/notification/Interpolators.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3.notification; - -import android.view.animation.Interpolator; -import android.view.animation.PathInterpolator; - -/** - * Utility class to receive interpolators from. - * - * This class was copied from com.android.systemui. - */ -public class Interpolators { - public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f); - public static final Interpolator FAST_OUT_LINEAR_IN = new PathInterpolator(0.4f, 0f, 1f, 1f); - public static final Interpolator LINEAR_OUT_SLOW_IN = new PathInterpolator(0f, 0f, 0.2f, 1f); - - /** - * Interpolator to be used when animating a move based on a click. Pair with enough duration. - */ - public static final Interpolator TOUCH_RESPONSE = - new PathInterpolator(0.3f, 0f, 0.1f, 1f); -} diff --git a/src/com/android/launcher3/notification/NotificationMainView.java b/src/com/android/launcher3/notification/NotificationMainView.java index 5aff28db4..c8e1fdb3f 100644 --- a/src/com/android/launcher3/notification/NotificationMainView.java +++ b/src/com/android/launcher3/notification/NotificationMainView.java @@ -16,6 +16,8 @@ package com.android.launcher3.notification; +import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity; + import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.ColorStateList; @@ -25,7 +27,6 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; -import android.view.ViewPropertyAnimator; import android.widget.FrameLayout; import android.widget.TextView; @@ -167,14 +168,11 @@ public class NotificationMainView extends FrameLayout implements SwipeDetector.L endTranslation = 0; } - SwipeDetector.ScrollInterpolator interpolator = new SwipeDetector.ScrollInterpolator(); - interpolator.setVelocityAtZero(velocity); - long duration = SwipeDetector.calculateDuration(velocity, (endTranslation - getTranslationX()) / getWidth()); animate() .setDuration(duration) - .setInterpolator(interpolator) + .setInterpolator(scrollInterpolatorForVelocity(velocity)) .translationX(endTranslation) .withEndAction(new Runnable() { @Override diff --git a/src/com/android/launcher3/touch/SwipeDetector.java b/src/com/android/launcher3/touch/SwipeDetector.java index be4648eef..351f88ddd 100644 --- a/src/com/android/launcher3/touch/SwipeDetector.java +++ b/src/com/android/launcher3/touch/SwipeDetector.java @@ -16,6 +16,7 @@ package com.android.launcher3.touch; import static android.view.MotionEvent.INVALID_POINTER_ID; + import android.content.Context; import android.graphics.PointF; import android.support.annotation.NonNull; @@ -23,7 +24,6 @@ import android.support.annotation.VisibleForTesting; import android.util.Log; import android.view.MotionEvent; import android.view.ViewConfiguration; -import android.view.animation.Interpolator; /** * One dimensional scroll/drag/swipe gesture detector. @@ -43,7 +43,6 @@ public class SwipeDetector { public static final int DIRECTION_BOTH = DIRECTION_NEGATIVE | DIRECTION_POSITIVE; private static final float ANIMATION_DURATION = 1200; - private static final float FAST_FLING_PX_MS = 10; protected int mActivePointerId = INVALID_POINTER_ID; @@ -351,22 +350,4 @@ public class SwipeDetector { } return duration; } - - public static class ScrollInterpolator implements Interpolator { - - boolean mSteeper; - - public void setVelocityAtZero(float velocity) { - mSteeper = velocity > FAST_FLING_PX_MS; - } - - public float getInterpolation(float t) { - t -= 1.0f; - float output = t * t * t; - if (mSteeper) { - output *= t * t; // Make interpolation initial slope steeper - } - return output + 1; - } - } } diff --git a/src/com/android/launcher3/util/WallpaperOffsetInterpolator.java b/src/com/android/launcher3/util/WallpaperOffsetInterpolator.java index ec494f181..5c2468740 100644 --- a/src/com/android/launcher3/util/WallpaperOffsetInterpolator.java +++ b/src/com/android/launcher3/util/WallpaperOffsetInterpolator.java @@ -10,11 +10,11 @@ import android.os.IBinder; import android.os.Message; import android.os.SystemClock; import android.util.Log; -import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; +import com.android.launcher3.anim.Interpolators; /** * Utility class to handle wallpaper scrolling along with workspace. @@ -199,7 +199,7 @@ public class WallpaperOffsetInterpolator extends BroadcastReceiver { public OffsetHandler(Context context) { super(UiThreadHelper.getBackgroundLooper()); - mInterpolator = new DecelerateInterpolator(1.5f); + mInterpolator = Interpolators.DEACCEL_1_5; mWM = WallpaperManager.getInstance(context); } diff --git a/src/com/android/launcher3/widget/BaseWidgetSheet.java b/src/com/android/launcher3/widget/BaseWidgetSheet.java index 61a733338..e32875926 100644 --- a/src/com/android/launcher3/widget/BaseWidgetSheet.java +++ b/src/com/android/launcher3/widget/BaseWidgetSheet.java @@ -15,6 +15,7 @@ */ package com.android.launcher3.widget; +import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity; import static com.android.launcher3.logging.LoggerUtils.newContainerTarget; import android.animation.Animator; @@ -29,8 +30,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; import android.widget.Toast; import com.android.launcher3.AbstractFloatingView; @@ -41,6 +41,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAnimUtils; import com.android.launcher3.R; import com.android.launcher3.Utilities; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.dragndrop.DragOptions; import com.android.launcher3.graphics.GradientView; import com.android.launcher3.touch.SwipeDetector; @@ -76,12 +77,12 @@ abstract class BaseWidgetSheet extends AbstractFloatingView private Toast mWidgetInstructionToast; protected final Launcher mLauncher; - protected final SwipeDetector.ScrollInterpolator mScrollInterpolator; protected final SwipeDetector mSwipeDetector; protected final ObjectAnimator mOpenCloseAnimator; protected View mContent; protected GradientView mGradientView; + protected Interpolator mScrollInterpolator; // range [0, 1], 0=> completely open, 1=> completely closed protected float mTranslationShift = TRANSLATION_SHIFT_CLOSED; @@ -92,7 +93,7 @@ abstract class BaseWidgetSheet extends AbstractFloatingView super(context, attrs, defStyleAttr); mLauncher = Launcher.getLauncher(context); - mScrollInterpolator = new SwipeDetector.ScrollInterpolator(); + mScrollInterpolator = Interpolators.SCROLL_CUBIC; mSwipeDetector = new SwipeDetector(context, this, SwipeDetector.VERTICAL); mOpenCloseAnimator = LauncherAnimUtils.ofPropertyValuesHolder(this); @@ -206,7 +207,7 @@ abstract class BaseWidgetSheet extends AbstractFloatingView @Override public void onDragEnd(float velocity, boolean fling) { if ((fling && velocity > 0) || mTranslationShift > 0.5f) { - mScrollInterpolator.setVelocityAtZero(velocity); + mScrollInterpolator = scrollInterpolatorForVelocity(velocity); mOpenCloseAnimator.setDuration(SwipeDetector.calculateDuration( velocity, TRANSLATION_SHIFT_CLOSED - mTranslationShift)); close(true); @@ -215,7 +216,7 @@ abstract class BaseWidgetSheet extends AbstractFloatingView TRANSLATION_SHIFT, TRANSLATION_SHIFT_OPENED)); mOpenCloseAnimator.setDuration( SwipeDetector.calculateDuration(velocity, mTranslationShift)) - .setInterpolator(new DecelerateInterpolator()); + .setInterpolator(Interpolators.DEACCEL); mOpenCloseAnimator.start(); } } @@ -236,7 +237,7 @@ abstract class BaseWidgetSheet extends AbstractFloatingView if (mSwipeDetector.isIdleState()) { mOpenCloseAnimator .setDuration(defaultDuration) - .setInterpolator(new AccelerateInterpolator()); + .setInterpolator(Interpolators.ACCEL); } else { mOpenCloseAnimator.setInterpolator(mScrollInterpolator); } diff --git a/src/com/android/launcher3/widget/WidgetsBottomSheet.java b/src/com/android/launcher3/widget/WidgetsBottomSheet.java index 3bb3fcb98..7fa5ff054 100644 --- a/src/com/android/launcher3/widget/WidgetsBottomSheet.java +++ b/src/com/android/launcher3/widget/WidgetsBottomSheet.java @@ -24,8 +24,6 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.animation.AnimationUtils; -import android.view.animation.Interpolator; import android.widget.TextView; import com.android.launcher3.Insettable; @@ -33,6 +31,7 @@ import com.android.launcher3.ItemInfo; import com.android.launcher3.LauncherAppState; import com.android.launcher3.R; import com.android.launcher3.Utilities; +import com.android.launcher3.anim.Interpolators; import com.android.launcher3.graphics.GradientView; import com.android.launcher3.model.WidgetItem; import com.android.launcher3.util.PackageUserKey; @@ -46,7 +45,6 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable { private static final int DEFAULT_CLOSE_DURATION = 200; private ItemInfo mOriginalItemInfo; - private Interpolator mFastOutSlowInInterpolator; private Rect mInsets; public WidgetsBottomSheet(Context context, AttributeSet attrs) { @@ -56,8 +54,6 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable { public WidgetsBottomSheet(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setWillNotDraw(false); - mFastOutSlowInInterpolator = - AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in); mInsets = new Rect(); mGradientView = (GradientView) mLauncher.getLayoutInflater().inflate( @@ -148,7 +144,7 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable { if (animate) { mOpenCloseAnimator.setValues( PropertyValuesHolder.ofFloat(TRANSLATION_SHIFT, TRANSLATION_SHIFT_OPENED)); - mOpenCloseAnimator.setInterpolator(mFastOutSlowInInterpolator); + mOpenCloseAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); mOpenCloseAnimator.start(); } else { setTranslationShift(TRANSLATION_SHIFT_OPENED); |