diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2018-05-23 07:23:07 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-05-23 07:23:07 +0000 |
commit | 4ac63b28ced5d5b09eaae39adca68377a2a7ef5b (patch) | |
tree | 190b1a5377bf6dfc836e4be57767d0cd512c6bf2 /quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java | |
parent | 8102503413976f42f825aacda49af53a5483933b (diff) | |
parent | d00202ed3306950264be533cb2e8a171f58f7930 (diff) | |
download | android_packages_apps_Trebuchet-4ac63b28ced5d5b09eaae39adca68377a2a7ef5b.tar.gz android_packages_apps_Trebuchet-4ac63b28ced5d5b09eaae39adca68377a2a7ef5b.tar.bz2 android_packages_apps_Trebuchet-4ac63b28ced5d5b09eaae39adca68377a2a7ef5b.zip |
Snap for 4799153 from d00202ed3306950264be533cb2e8a171f58f7930 to pi-release
Change-Id: I72cfd121a4f78f4f1c44a5989a07bc9926593a2c
Diffstat (limited to 'quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java')
-rw-r--r-- | quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java b/quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java new file mode 100644 index 000000000..e798d5cbc --- /dev/null +++ b/quickstep/src/com/android/quickstep/util/MultiValueUpdateListener.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2018 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.quickstep.util; + +import android.animation.ValueAnimator; +import android.view.animation.Interpolator; + +import java.util.ArrayList; + +/** + * Utility class to update multiple values with different interpolators and durations during + * the same animation. + */ +public abstract class MultiValueUpdateListener implements ValueAnimator.AnimatorUpdateListener { + + private final ArrayList<FloatProp> mAllProperties = new ArrayList<>(); + + @Override + public final void onAnimationUpdate(ValueAnimator animator) { + final float percent = animator.getAnimatedFraction(); + final float currentPlayTime = percent * animator.getDuration(); + + for (int i = mAllProperties.size() - 1; i >= 0; i--) { + FloatProp prop = mAllProperties.get(i); + float time = Math.max(0, currentPlayTime - prop.mDelay); + float newPercent = Math.min(1f, time / prop.mDuration); + newPercent = prop.mInterpolator.getInterpolation(newPercent); + prop.value = prop.mEnd * newPercent + prop.mStart * (1 - newPercent); + } + onUpdate(percent); + } + + public abstract void onUpdate(float percent); + + public final class FloatProp { + + public float value; + + private final float mStart; + private final float mEnd; + private final float mDelay; + private final float mDuration; + private final Interpolator mInterpolator; + + public FloatProp(float start, float end, float delay, float duration, Interpolator i) { + value = mStart = start; + mEnd = end; + mDelay = delay; + mDuration = duration; + mInterpolator = i; + + mAllProperties.add(this); + } + } +} |