| /* |
| * Copyright (C) 2015 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 android.support.v4.animation; |
| |
| import android.animation.Animator; |
| import android.animation.PropertyValuesHolder; |
| import android.animation.TimeInterpolator; |
| import android.animation.TypeEvaluator; |
| import android.animation.ValueAnimator; |
| import android.view.View; |
| |
| /** |
| * Uses framework Animators to provide ValueAnimatorCompat interface. |
| * <p> |
| * This is not a fully implemented API which is why it is not public. |
| * |
| * @hide |
| */ |
| class HoneycombMr1AnimatorCompatProvider implements AnimatorProvider { |
| |
| private TimeInterpolator mDefaultInterpolator; |
| |
| @Override |
| public ValueAnimatorCompat emptyValueAnimator() { |
| return new HoneycombValueAnimatorCompat(ValueAnimator.ofFloat(0f, 1f)); |
| } |
| |
| static class HoneycombValueAnimatorCompat implements ValueAnimatorCompat { |
| |
| final Animator mWrapped; |
| |
| public HoneycombValueAnimatorCompat(Animator wrapped) { |
| mWrapped = wrapped; |
| } |
| |
| @Override |
| public void setTarget(View view) { |
| mWrapped.setTarget(view); |
| } |
| |
| @Override |
| public void addListener(AnimatorListenerCompat listener) { |
| mWrapped.addListener(new AnimatorListenerCompatWrapper(listener, this)); |
| } |
| |
| @Override |
| public void setDuration(long duration) { |
| mWrapped.setDuration(duration); |
| } |
| |
| @Override |
| public void start() { |
| mWrapped.start(); |
| } |
| |
| @Override |
| public void cancel() { |
| mWrapped.cancel(); |
| } |
| |
| @Override |
| public void addUpdateListener(final AnimatorUpdateListenerCompat animatorUpdateListener) { |
| if (mWrapped instanceof ValueAnimator) { |
| ((ValueAnimator) mWrapped).addUpdateListener( |
| new ValueAnimator.AnimatorUpdateListener() { |
| @Override |
| public void onAnimationUpdate(ValueAnimator animation) { |
| animatorUpdateListener |
| .onAnimationUpdate(HoneycombValueAnimatorCompat.this); |
| } |
| }); |
| } |
| } |
| |
| @Override |
| public float getAnimatedFraction() { |
| return ((ValueAnimator) mWrapped).getAnimatedFraction(); |
| } |
| } |
| |
| static class AnimatorListenerCompatWrapper implements Animator.AnimatorListener { |
| |
| final AnimatorListenerCompat mWrapped; |
| |
| final ValueAnimatorCompat mValueAnimatorCompat; |
| |
| public AnimatorListenerCompatWrapper( |
| AnimatorListenerCompat wrapped, ValueAnimatorCompat valueAnimatorCompat) { |
| mWrapped = wrapped; |
| mValueAnimatorCompat = valueAnimatorCompat; |
| } |
| |
| @Override |
| public void onAnimationStart(Animator animation) { |
| mWrapped.onAnimationStart(mValueAnimatorCompat); |
| } |
| |
| @Override |
| public void onAnimationEnd(Animator animation) { |
| mWrapped.onAnimationEnd(mValueAnimatorCompat); |
| } |
| |
| @Override |
| public void onAnimationCancel(Animator animation) { |
| mWrapped.onAnimationCancel(mValueAnimatorCompat); |
| } |
| |
| @Override |
| public void onAnimationRepeat(Animator animation) { |
| mWrapped.onAnimationRepeat(mValueAnimatorCompat); |
| } |
| } |
| |
| @Override |
| public void clearInterpolator(View view) { |
| if (mDefaultInterpolator == null) { |
| mDefaultInterpolator = new ValueAnimator().getInterpolator(); |
| } |
| view.animate().setInterpolator(mDefaultInterpolator); |
| } |
| } |