HoneycombMr1AnimatorCompatProvider.java revision 3ac77bf186f87ecad4bf0063b2f6c4384efbd56a
1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.support.v4.animation; 18 19import android.animation.Animator; 20import android.animation.PropertyValuesHolder; 21import android.animation.TimeInterpolator; 22import android.animation.TypeEvaluator; 23import android.animation.ValueAnimator; 24import android.view.View; 25 26/** 27 * Uses framework Animators to provide ValueAnimatorCompat interface. 28 * <p> 29 * This is not a fully implemented API which is why it is not public. 30 * 31 * @hide 32 */ 33class HoneycombMr1AnimatorCompatProvider implements AnimatorProvider { 34 35 private TimeInterpolator mDefaultInterpolator; 36 37 @Override 38 public ValueAnimatorCompat emptyValueAnimator() { 39 return new HoneycombValueAnimatorCompat(ValueAnimator.ofFloat(0f, 1f)); 40 } 41 42 static class HoneycombValueAnimatorCompat implements ValueAnimatorCompat { 43 44 final Animator mWrapped; 45 46 public HoneycombValueAnimatorCompat(Animator wrapped) { 47 mWrapped = wrapped; 48 } 49 50 @Override 51 public void setTarget(View view) { 52 mWrapped.setTarget(view); 53 } 54 55 @Override 56 public void addListener(AnimatorListenerCompat listener) { 57 mWrapped.addListener(new AnimatorListenerCompatWrapper(listener, this)); 58 } 59 60 @Override 61 public void setDuration(long duration) { 62 mWrapped.setDuration(duration); 63 } 64 65 @Override 66 public void start() { 67 mWrapped.start(); 68 } 69 70 @Override 71 public void cancel() { 72 mWrapped.cancel(); 73 } 74 75 @Override 76 public void addUpdateListener(final AnimatorUpdateListenerCompat animatorUpdateListener) { 77 if (mWrapped instanceof ValueAnimator) { 78 ((ValueAnimator) mWrapped).addUpdateListener( 79 new ValueAnimator.AnimatorUpdateListener() { 80 @Override 81 public void onAnimationUpdate(ValueAnimator animation) { 82 animatorUpdateListener 83 .onAnimationUpdate(HoneycombValueAnimatorCompat.this); 84 } 85 }); 86 } 87 } 88 89 @Override 90 public float getAnimatedFraction() { 91 return ((ValueAnimator) mWrapped).getAnimatedFraction(); 92 } 93 } 94 95 static class AnimatorListenerCompatWrapper implements Animator.AnimatorListener { 96 97 final AnimatorListenerCompat mWrapped; 98 99 final ValueAnimatorCompat mValueAnimatorCompat; 100 101 public AnimatorListenerCompatWrapper( 102 AnimatorListenerCompat wrapped, ValueAnimatorCompat valueAnimatorCompat) { 103 mWrapped = wrapped; 104 mValueAnimatorCompat = valueAnimatorCompat; 105 } 106 107 @Override 108 public void onAnimationStart(Animator animation) { 109 mWrapped.onAnimationStart(mValueAnimatorCompat); 110 } 111 112 @Override 113 public void onAnimationEnd(Animator animation) { 114 mWrapped.onAnimationEnd(mValueAnimatorCompat); 115 } 116 117 @Override 118 public void onAnimationCancel(Animator animation) { 119 mWrapped.onAnimationCancel(mValueAnimatorCompat); 120 } 121 122 @Override 123 public void onAnimationRepeat(Animator animation) { 124 mWrapped.onAnimationRepeat(mValueAnimatorCompat); 125 } 126 } 127 128 @Override 129 public void clearInterpolator(View view) { 130 if (mDefaultInterpolator == null) { 131 mDefaultInterpolator = new ValueAnimator().getInterpolator(); 132 } 133 view.animate().setInterpolator(mDefaultInterpolator); 134 } 135} 136