HoneycombMr1AnimatorCompatProvider.java revision c39d9c75590eca86a5e7e32a8824ba04a0d42e9b
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 */ 31class HoneycombMr1AnimatorCompatProvider implements AnimatorProvider { 32 33 private TimeInterpolator mDefaultInterpolator; 34 35 @Override 36 public ValueAnimatorCompat emptyValueAnimator() { 37 return new HoneycombValueAnimatorCompat(ValueAnimator.ofFloat(0f, 1f)); 38 } 39 40 static class HoneycombValueAnimatorCompat implements ValueAnimatorCompat { 41 42 final Animator mWrapped; 43 44 public HoneycombValueAnimatorCompat(Animator wrapped) { 45 mWrapped = wrapped; 46 } 47 48 @Override 49 public void setTarget(View view) { 50 mWrapped.setTarget(view); 51 } 52 53 @Override 54 public void addListener(AnimatorListenerCompat listener) { 55 mWrapped.addListener(new AnimatorListenerCompatWrapper(listener, this)); 56 } 57 58 @Override 59 public void setDuration(long duration) { 60 mWrapped.setDuration(duration); 61 } 62 63 @Override 64 public void start() { 65 mWrapped.start(); 66 } 67 68 @Override 69 public void cancel() { 70 mWrapped.cancel(); 71 } 72 73 @Override 74 public void addUpdateListener(final AnimatorUpdateListenerCompat animatorUpdateListener) { 75 if (mWrapped instanceof ValueAnimator) { 76 ((ValueAnimator) mWrapped).addUpdateListener( 77 new ValueAnimator.AnimatorUpdateListener() { 78 @Override 79 public void onAnimationUpdate(ValueAnimator animation) { 80 animatorUpdateListener 81 .onAnimationUpdate(HoneycombValueAnimatorCompat.this); 82 } 83 }); 84 } 85 } 86 87 @Override 88 public float getAnimatedFraction() { 89 return ((ValueAnimator) mWrapped).getAnimatedFraction(); 90 } 91 } 92 93 static class AnimatorListenerCompatWrapper implements Animator.AnimatorListener { 94 95 final AnimatorListenerCompat mWrapped; 96 97 final ValueAnimatorCompat mValueAnimatorCompat; 98 99 public AnimatorListenerCompatWrapper( 100 AnimatorListenerCompat wrapped, ValueAnimatorCompat valueAnimatorCompat) { 101 mWrapped = wrapped; 102 mValueAnimatorCompat = valueAnimatorCompat; 103 } 104 105 @Override 106 public void onAnimationStart(Animator animation) { 107 mWrapped.onAnimationStart(mValueAnimatorCompat); 108 } 109 110 @Override 111 public void onAnimationEnd(Animator animation) { 112 mWrapped.onAnimationEnd(mValueAnimatorCompat); 113 } 114 115 @Override 116 public void onAnimationCancel(Animator animation) { 117 mWrapped.onAnimationCancel(mValueAnimatorCompat); 118 } 119 120 @Override 121 public void onAnimationRepeat(Animator animation) { 122 mWrapped.onAnimationRepeat(mValueAnimatorCompat); 123 } 124 } 125 126 @Override 127 public void clearInterpolator(View view) { 128 if (mDefaultInterpolator == null) { 129 mDefaultInterpolator = new ValueAnimator().getInterpolator(); 130 } 131 view.animate().setInterpolator(mDefaultInterpolator); 132 } 133} 134