1d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase/* 2d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Copyright (C) 2014 The Android Open Source Project 3d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 4d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * you may not use this file except in compliance with the License. 6d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * You may obtain a copy of the License at 7d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 8d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * http://www.apache.org/licenses/LICENSE-2.0 9d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 10d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Unless required by applicable law or agreed to in writing, software 11d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * See the License for the specific language governing permissions and 14d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * limitations under the License. 15d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 16d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haasepackage android.support.v4.view; 17d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 18bfd48d0521963754e04e407499ee9e278fe06c0fChris Banesimport android.os.Build; 19d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport android.view.View; 20d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport android.view.animation.Interpolator; 21d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 22d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport java.lang.ref.WeakReference; 23797c82a7055f7ba825169388465617f0db716739Chet Haaseimport java.util.WeakHashMap; 24d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 25c5847d13e40f5d52459f5c0dab32dc08f1a9a683Chris Banespublic final class ViewPropertyAnimatorCompat { 26d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase private static final String TAG = "ViewAnimatorCompat"; 27d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase private WeakReference<View> mView; 28ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Runnable mStartAction = null; 29ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Runnable mEndAction = null; 30ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private int mOldLayerType = -1; 31ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase // HACK ALERT! Choosing this id knowing that the framework does not use it anywhere 32ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase // internally and apps should use ids higher than it 33ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase static final int LISTENER_TAG_ID = 0x7e000000; 34ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 35d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompat(View view) { 36d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase mView = new WeakReference<View>(view); 37d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 38d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 39d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase interface ViewPropertyAnimatorCompatImpl { 40ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setDuration(ViewPropertyAnimatorCompat vpa, View view, long value); 41ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getDuration(ViewPropertyAnimatorCompat vpa, View view); 42ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setInterpolator(ViewPropertyAnimatorCompat vpa, View view, Interpolator value); 43ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public Interpolator getInterpolator(ViewPropertyAnimatorCompat vpa, View view); 44ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setStartDelay(ViewPropertyAnimatorCompat vpa, View view, long value); 45ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getStartDelay(ViewPropertyAnimatorCompat vpa, View view); 46ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alpha(ViewPropertyAnimatorCompat vpa, View view, float value); 47ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alphaBy(ViewPropertyAnimatorCompat vpa, View view, float value); 48ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotation(ViewPropertyAnimatorCompat vpa, View view, float value); 49ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationBy(ViewPropertyAnimatorCompat vpa, View view, float value); 50ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationX(ViewPropertyAnimatorCompat vpa, View view, float value); 51ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationXBy(ViewPropertyAnimatorCompat vpa, View view, float value); 52ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationY(ViewPropertyAnimatorCompat vpa, View view, float value); 53ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationYBy(ViewPropertyAnimatorCompat vpa, View view, float value); 54ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleX(ViewPropertyAnimatorCompat vpa, View view, float value); 55ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleXBy(ViewPropertyAnimatorCompat vpa, View view, float value); 56ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleY(ViewPropertyAnimatorCompat vpa, View view, float value); 57ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleYBy(ViewPropertyAnimatorCompat vpa, View view, float value); 58ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void cancel(ViewPropertyAnimatorCompat vpa, View view); 59ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void x(ViewPropertyAnimatorCompat vpa, View view, float value); 60ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void xBy(ViewPropertyAnimatorCompat vpa, View view, float value); 61ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void y(ViewPropertyAnimatorCompat vpa, View view, float value); 62ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void yBy(ViewPropertyAnimatorCompat vpa, View view, float value); 63e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void z(ViewPropertyAnimatorCompat vpa, View view, float value); 64e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void zBy(ViewPropertyAnimatorCompat vpa, View view, float value); 65ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationX(ViewPropertyAnimatorCompat vpa, View view, float value); 66ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationXBy(ViewPropertyAnimatorCompat vpa, View view, float value); 67ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationY(ViewPropertyAnimatorCompat vpa, View view, float value); 68ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationYBy(ViewPropertyAnimatorCompat vpa, View view, float value); 69e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void translationZ(ViewPropertyAnimatorCompat vpa, View view, float value); 70e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void translationZBy(ViewPropertyAnimatorCompat vpa, View view, float value); 71ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void start(ViewPropertyAnimatorCompat vpa, View view); 72ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view); 73ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable); 74ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable); 75ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, 76ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener); 77ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setUpdateListener(ViewPropertyAnimatorCompat vpa, View view, 78ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorUpdateListener listener); 79d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase }; 80d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 81d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class BaseViewPropertyAnimatorCompatImpl implements ViewPropertyAnimatorCompatImpl { 82797c82a7055f7ba825169388465617f0db716739Chet Haase WeakHashMap<View, Runnable> mStarterMap = null; 83d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 84d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 85ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setDuration(ViewPropertyAnimatorCompat vpa, View view, long value) { 86d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 87d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 88d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 89d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 90ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alpha(ViewPropertyAnimatorCompat vpa, View view, float value) { 91d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 92ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 93d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 94d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 95d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 96ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 97d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 98ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 99d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 100d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 102ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 103d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 104ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 105d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 106d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 107d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 108ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 109ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mEndAction = runnable; 110ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 111d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 112d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 113d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 114ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getDuration(ViewPropertyAnimatorCompat vpa, View view) { 115d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 116d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 117d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 118d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 119ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setInterpolator(ViewPropertyAnimatorCompat vpa, View view, Interpolator value) { 120d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 121d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 122d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 123d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 124ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public Interpolator getInterpolator(ViewPropertyAnimatorCompat vpa, View view) { 125d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return null; 126d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 127d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 128d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 129ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setStartDelay(ViewPropertyAnimatorCompat vpa, View view, long value) { 130d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 131d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 132d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 133d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 134ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getStartDelay(ViewPropertyAnimatorCompat vpa, View view) { 135d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 136d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 137d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 138d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 139ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alphaBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 140d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 141ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 142d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 143d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 144d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 145ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotation(ViewPropertyAnimatorCompat vpa, View view, float value) { 146d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 147ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 148d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 149d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 150d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 151ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 152d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 153ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 154d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 155d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 156d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 157ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 158d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 159ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 160d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 161d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 162d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 163ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 164d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 165ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 166d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 167d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 168d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 169ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 170d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 171ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 172d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 173d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 174d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 175ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 176d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 177ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 178d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 179d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 180d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 181ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleX(ViewPropertyAnimatorCompat vpa, View view, float value) { 182d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 183ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 184d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 185d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 186d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 187ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 188d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 189ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 190d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 191d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 192d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 193ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleY(ViewPropertyAnimatorCompat vpa, View view, float value) { 194d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 195ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 196d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 197d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 198d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 199ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 200d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 201ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 202d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 203d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 204d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 205ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void cancel(ViewPropertyAnimatorCompat vpa, View view) { 206d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 207ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 208d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 209d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 210d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 211ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void x(ViewPropertyAnimatorCompat vpa, View view, float value) { 212d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 213ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 214d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 215d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 216d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 217ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void xBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 218d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 219ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 220d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 221d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 222d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 223ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void y(ViewPropertyAnimatorCompat vpa, View view, float value) { 224d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 225ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 226d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 227d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 228d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 229ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void yBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 230d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 231ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 232d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 233d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 234d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 235e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void z(ViewPropertyAnimatorCompat vpa, View view, float value) { 236e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes // noop on versions prior to Lollipop 237e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 238e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 239e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 240e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void zBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 241e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes // noop on versions prior to Lollipop 242e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 243e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 244e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 245ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 246d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 247ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 248d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 249d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 250d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 251ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 252d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 253ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 254d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 255d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 256d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 257e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void translationZ(ViewPropertyAnimatorCompat vpa, View view, float value) { 258e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes // noop on versions prior to Lollipop 259e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 260e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 261e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 262e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void translationZBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 263e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes // noop on versions prior to Lollipop 264e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 265e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 266e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 267ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void start(ViewPropertyAnimatorCompat vpa, View view) { 268797c82a7055f7ba825169388465617f0db716739Chet Haase removeStartMessage(view); 269ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase startAnimation(vpa, view); 270d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 271d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 272d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 273ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view) { 274d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 275d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 276d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 277d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 278ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 279ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mStartAction = runnable; 280ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 281d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 282d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 283d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 284ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorListener listener) { 285ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase view.setTag(LISTENER_TAG_ID, listener); 28649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 28749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 28849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes @Override 289ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setUpdateListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorUpdateListener listener) { 29049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes // noop 291d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 292797c82a7055f7ba825169388465617f0db716739Chet Haase 293ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private void startAnimation(ViewPropertyAnimatorCompat vpa, View view) { 294ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 295ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 296ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 297ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 298ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 299ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Runnable startAction = vpa.mStartAction; 300ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Runnable endAction = vpa.mEndAction; 301fdd92b54cc21d9927ee89cf675cf4c90c306f24aChet Haase vpa.mStartAction = null; 302fdd92b54cc21d9927ee89cf675cf4c90c306f24aChet Haase vpa.mEndAction = null; 303797c82a7055f7ba825169388465617f0db716739Chet Haase if (startAction != null) { 304797c82a7055f7ba825169388465617f0db716739Chet Haase startAction.run(); 305797c82a7055f7ba825169388465617f0db716739Chet Haase } 306797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 307797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationStart(view); 308797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationEnd(view); 309797c82a7055f7ba825169388465617f0db716739Chet Haase } 310797c82a7055f7ba825169388465617f0db716739Chet Haase if (endAction != null) { 311797c82a7055f7ba825169388465617f0db716739Chet Haase endAction.run(); 312797c82a7055f7ba825169388465617f0db716739Chet Haase } 313797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 314797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap.remove(view); 315797c82a7055f7ba825169388465617f0db716739Chet Haase } 316797c82a7055f7ba825169388465617f0db716739Chet Haase } 317797c82a7055f7ba825169388465617f0db716739Chet Haase 318797c82a7055f7ba825169388465617f0db716739Chet Haase class Starter implements Runnable { 319797c82a7055f7ba825169388465617f0db716739Chet Haase WeakReference<View> mViewRef; 320ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompat mVpa; 321797c82a7055f7ba825169388465617f0db716739Chet Haase 322ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Starter(ViewPropertyAnimatorCompat vpa, View view) { 323797c82a7055f7ba825169388465617f0db716739Chet Haase mViewRef = new WeakReference<View>(view); 324ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa = vpa; 325797c82a7055f7ba825169388465617f0db716739Chet Haase } 326797c82a7055f7ba825169388465617f0db716739Chet Haase 327797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 328797c82a7055f7ba825169388465617f0db716739Chet Haase public void run() { 3293a91bf644ea3e07a52da5f1741b9b229493c84f9Yigit Boyar final View view = mViewRef.get(); 3303a91bf644ea3e07a52da5f1741b9b229493c84f9Yigit Boyar if (view != null) { 3313a91bf644ea3e07a52da5f1741b9b229493c84f9Yigit Boyar startAnimation(mVpa, view); 3323a91bf644ea3e07a52da5f1741b9b229493c84f9Yigit Boyar } 333797c82a7055f7ba825169388465617f0db716739Chet Haase } 334797c82a7055f7ba825169388465617f0db716739Chet Haase }; 335797c82a7055f7ba825169388465617f0db716739Chet Haase 336797c82a7055f7ba825169388465617f0db716739Chet Haase private void removeStartMessage(View view) { 337797c82a7055f7ba825169388465617f0db716739Chet Haase Runnable starter = null; 338797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 339797c82a7055f7ba825169388465617f0db716739Chet Haase starter = mStarterMap.get(view); 340797c82a7055f7ba825169388465617f0db716739Chet Haase if (starter != null) { 341797c82a7055f7ba825169388465617f0db716739Chet Haase view.removeCallbacks(starter); 342797c82a7055f7ba825169388465617f0db716739Chet Haase } 343797c82a7055f7ba825169388465617f0db716739Chet Haase } 344797c82a7055f7ba825169388465617f0db716739Chet Haase } 345797c82a7055f7ba825169388465617f0db716739Chet Haase 346ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private void postStartMessage(ViewPropertyAnimatorCompat vpa, View view) { 347797c82a7055f7ba825169388465617f0db716739Chet Haase Runnable starter = null; 348797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 349797c82a7055f7ba825169388465617f0db716739Chet Haase starter = mStarterMap.get(view); 350797c82a7055f7ba825169388465617f0db716739Chet Haase } 351797c82a7055f7ba825169388465617f0db716739Chet Haase if (starter == null) { 352ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase starter = new Starter(vpa, view); 353797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap == null) { 354797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap = new WeakHashMap<View, Runnable>(); 355797c82a7055f7ba825169388465617f0db716739Chet Haase } 356797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap.put(view, starter); 357797c82a7055f7ba825169388465617f0db716739Chet Haase } 358797c82a7055f7ba825169388465617f0db716739Chet Haase view.removeCallbacks(starter); 359797c82a7055f7ba825169388465617f0db716739Chet Haase view.post(starter); 360797c82a7055f7ba825169388465617f0db716739Chet Haase } 361797c82a7055f7ba825169388465617f0db716739Chet Haase 362d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 363d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 364d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class ICSViewPropertyAnimatorCompatImpl extends BaseViewPropertyAnimatorCompatImpl { 365797c82a7055f7ba825169388465617f0db716739Chet Haase WeakHashMap<View, Integer> mLayerMap = null; 366d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 367d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 368ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setDuration(ViewPropertyAnimatorCompat vpa, View view, long value) { 369d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setDuration(view, value); 370d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 371d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 372d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 373ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alpha(ViewPropertyAnimatorCompat vpa, View view, float value) { 374d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.alpha(view, value); 375d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 376d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 377d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 378ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 379d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationX(view, value); 380d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 381d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 382d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 383ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 384d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationY(view, value); 385d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 386d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 387d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 388ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getDuration(ViewPropertyAnimatorCompat vpa, View view) { 389d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return ViewPropertyAnimatorCompatICS.getDuration(view); 390d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 391d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 392d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 393ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setInterpolator(ViewPropertyAnimatorCompat vpa, View view, Interpolator value) { 394d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setInterpolator(view, value); 395d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 396d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 397d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 398ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setStartDelay(ViewPropertyAnimatorCompat vpa, View view, long value) { 399d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setStartDelay(view, value); 400d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 401d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 402d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 403ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getStartDelay(ViewPropertyAnimatorCompat vpa, View view) { 404d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return ViewPropertyAnimatorCompatICS.getStartDelay(view); 405d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 406d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 407d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 408ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alphaBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 409d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.alphaBy(view, value); 410d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 411d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 412d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 413ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotation(ViewPropertyAnimatorCompat vpa, View view, float value) { 414d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotation(view, value); 415d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 416d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 417d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 418ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 419d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationBy(view, value); 420d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 421d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 422d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 423ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 424d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationX(view, value); 425d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 426d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 427d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 428ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 429d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationXBy(view, value); 430d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 431d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 432d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 433ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 434d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationY(view, value); 435d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 436d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 437d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 438ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 439d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationYBy(view, value); 440d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 441d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 442d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 443ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleX(ViewPropertyAnimatorCompat vpa, View view, float value) { 444d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleX(view, value); 445d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 446d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 447d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 448ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 449d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleXBy(view, value); 450d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 451d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 452d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 453ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleY(ViewPropertyAnimatorCompat vpa, View view, float value) { 454d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleY(view, value); 455d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 456d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 457d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 458ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 459d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleYBy(view, value); 460d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 461d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 462d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 463ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void cancel(ViewPropertyAnimatorCompat vpa, View view) { 464d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.cancel(view); 465d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 466d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 467d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 468ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void x(ViewPropertyAnimatorCompat vpa, View view, float value) { 469d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.x(view, value); 470d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 471d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 472d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 473ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void xBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 474d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.xBy(view, value); 475d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 476d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 477d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 478ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void y(ViewPropertyAnimatorCompat vpa, View view, float value) { 479d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.y(view, value); 480d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 481d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 482d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 483ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void yBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 484d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.yBy(view, value); 485d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 486d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 487d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 488ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 489d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationXBy(view, value); 490d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 491d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 492d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 493ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 494d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationYBy(view, value); 495d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 496d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 497d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 498ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void start(ViewPropertyAnimatorCompat vpa, View view) { 499d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.start(view); 500d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 501d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 502d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 503ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorListener listener) { 504ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase view.setTag(LISTENER_TAG_ID, listener); 505ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 506d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 507d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 508d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 509ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, final Runnable runnable) { 510ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 511ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mEndAction = runnable; 512d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 513d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 514d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 515ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, final Runnable runnable) { 516ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 517ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mStartAction = runnable; 518d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 519d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 520d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 521ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view) { 522ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mOldLayerType = ViewCompat.getLayerType(view); 523ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 524797c82a7055f7ba825169388465617f0db716739Chet Haase } 525797c82a7055f7ba825169388465617f0db716739Chet Haase 526ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase static class MyVpaListener implements ViewPropertyAnimatorListener { 527ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompat mVpa; 528bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes boolean mAnimEndCalled; 529ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 530ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase MyVpaListener(ViewPropertyAnimatorCompat vpa) { 531ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa = vpa; 532ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 533ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 534797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 535797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationStart(View view) { 536bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes // Reset our end called flag, since this is a new animation... 537bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes mAnimEndCalled = false; 538bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes 539ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mOldLayerType >= 0) { 540d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewCompat.setLayerType(view, ViewCompat.LAYER_TYPE_HARDWARE, null); 541d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 542ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mStartAction != null) { 543fdd92b54cc21d9927ee89cf675cf4c90c306f24aChet Haase Runnable startAction = mVpa.mStartAction; 544fdd92b54cc21d9927ee89cf675cf4c90c306f24aChet Haase mVpa.mStartAction = null; 545fdd92b54cc21d9927ee89cf675cf4c90c306f24aChet Haase startAction.run(); 546ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 547ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 548ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 549ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 550ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 551797c82a7055f7ba825169388465617f0db716739Chet Haase } 552797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 553797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationStart(view); 554797c82a7055f7ba825169388465617f0db716739Chet Haase } 555797c82a7055f7ba825169388465617f0db716739Chet Haase } 556ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 557797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 558797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationEnd(View view) { 559ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mOldLayerType >= 0) { 560ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewCompat.setLayerType(view, mVpa.mOldLayerType, null); 561ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa.mOldLayerType = -1; 562ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 563bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes if (Build.VERSION.SDK_INT >= 16 || !mAnimEndCalled) { 564bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes // Pre-v16 seems to have a bug where onAnimationEnd is called 565bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes // twice, therefore we only dispatch on the first call 566bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes if (mVpa.mEndAction != null) { 567fdd92b54cc21d9927ee89cf675cf4c90c306f24aChet Haase Runnable endAction = mVpa.mEndAction; 568fdd92b54cc21d9927ee89cf675cf4c90c306f24aChet Haase mVpa.mEndAction = null; 569fdd92b54cc21d9927ee89cf675cf4c90c306f24aChet Haase endAction.run(); 570bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes } 571bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes Object listenerTag = view.getTag(LISTENER_TAG_ID); 572bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes ViewPropertyAnimatorListener listener = null; 573bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes if (listenerTag instanceof ViewPropertyAnimatorListener) { 574bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes listener = (ViewPropertyAnimatorListener) listenerTag; 575bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes } 576bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes if (listener != null) { 577bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes listener.onAnimationEnd(view); 578bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes } 579bfd48d0521963754e04e407499ee9e278fe06c0fChris Banes mAnimEndCalled = true; 580797c82a7055f7ba825169388465617f0db716739Chet Haase } 581797c82a7055f7ba825169388465617f0db716739Chet Haase } 582d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 583797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 584797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationCancel(View view) { 585ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 586ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 587ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 588ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 589ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 590797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 591797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationCancel(view); 592d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 593797c82a7055f7ba825169388465617f0db716739Chet Haase } 594797c82a7055f7ba825169388465617f0db716739Chet Haase }; 595d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 596d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 597d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class JBViewPropertyAnimatorCompatImpl extends ICSViewPropertyAnimatorCompatImpl { 598d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 599d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 600ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorListener listener) { 601ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatJB.setListener(view, listener); 602ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 603ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 604ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase @Override 605ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 606d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withStartAction(view, runnable); 607d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 608d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 609d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 610ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 611d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withEndAction(view, runnable); 612d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 613d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 614d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 615ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view) { 616d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withLayer(view); 617d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 618d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 619d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 620d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class JBMr2ViewPropertyAnimatorCompatImpl extends JBViewPropertyAnimatorCompatImpl { 621d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 622d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 623ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public Interpolator getInterpolator(ViewPropertyAnimatorCompat vpa, View view) { 624d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return (Interpolator) ViewPropertyAnimatorCompatJellybeanMr2.getInterpolator(view); 625d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 626d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 627d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 62849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes static class KitKatViewPropertyAnimatorCompatImpl extends JBMr2ViewPropertyAnimatorCompatImpl { 62949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes @Override 630ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setUpdateListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorUpdateListener listener) { 63149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes ViewPropertyAnimatorCompatKK.setUpdateListener(view, listener); 63249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 63349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 63449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 635e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes static class LollipopViewPropertyAnimatorCompatImpl extends KitKatViewPropertyAnimatorCompatImpl { 636e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 637e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void translationZ(ViewPropertyAnimatorCompat vpa, View view, float value) { 638e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes ViewPropertyAnimatorCompatLollipop.translationZ(view, value); 639e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 640e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 641e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 642e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void translationZBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 643e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes ViewPropertyAnimatorCompatLollipop.translationZBy(view, value); 644e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 645e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 646e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 647e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void z(ViewPropertyAnimatorCompat vpa, View view, float value) { 648e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes ViewPropertyAnimatorCompatLollipop.z(view, value); 649e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 650e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 651e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 652e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void zBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 653e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes ViewPropertyAnimatorCompatLollipop.zBy(view, value); 654e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 655e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 656e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 657d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static final ViewPropertyAnimatorCompatImpl IMPL; 658d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static { 659d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase final int version = android.os.Build.VERSION.SDK_INT; 660e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if (version >= 21) { 661e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL = new LollipopViewPropertyAnimatorCompatImpl(); 662e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } else if (version >= 19) { 66349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes IMPL = new KitKatViewPropertyAnimatorCompatImpl(); 66449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } else if (version >= 18) { 665d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new JBMr2ViewPropertyAnimatorCompatImpl(); 666d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else if (version >= 16) { 667d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new JBViewPropertyAnimatorCompatImpl(); 668d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else if (version >= 14) { 669d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new ICSViewPropertyAnimatorCompatImpl(); 670d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 671d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new BaseViewPropertyAnimatorCompatImpl(); 672d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 673d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 674d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 675d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 676d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the duration for the underlying animator that animates the requested properties. 677d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default value for ValueAnimator. Calling this method 678d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared value to be used instead. 679d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 680d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 681d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 682d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The length of ensuing property animations, in milliseconds. The value 683d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * cannot be negative. 684d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 685d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 686d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setDuration(long value) { 687d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 688d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 689ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setDuration(this, view, value); 690d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 691d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 692d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 693d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 694d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 695d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>alpha</code> property to be animated to the 696d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 697d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 698d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 699d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 700d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 701d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 702d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 703d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat alpha(float value) { 704d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 705d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 706ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.alpha(this, view, value); 707d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 708d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 709d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 710d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 711d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 712d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>alpha</code> property to be animated by the 713d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 714d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 715d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 716d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 717d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 718d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 719d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 720d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat alphaBy(float value) { 721d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 722d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 723ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.alphaBy(this, view, value); 724d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 725d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 726d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 727d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 728d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 729d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationX</code> property to be animated to the 730d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 731d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 732d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 733d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 734d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 735d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 736d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 737d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationX(float value) { 738d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 739d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 740ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationX(this, view, value); 741d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 742d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 743d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 744d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 745d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 746d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationY</code> property to be animated to the 747d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 748d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 749d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 750d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 751d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 752d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 753d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 754d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationY(float value) { 755d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 756d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 757ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationY(this, view, value); 758d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 759d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 760d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 761d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 762d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 763d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Specifies an action to take place when the next animation ends. The action is only 764d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * run if the animation ends normally; if the ViewPropertyAnimator is canceled during 765d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * that animation, the runnable will not run. 766d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method, along with {@link #withStartAction(Runnable)}, is intended to help facilitate 767d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * choreographing ViewPropertyAnimator animations with other animations or actions 768d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in the application. 769d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 770d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For example, the following code animates a view to x=200 and then back to 0:</p> 771d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <pre> 772d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Runnable endAction = new Runnable() { 773d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * public void run() { 774d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view.animate().x(0); 775d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * } 776d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * }; 777d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view.animate().x(200).withEndAction(endAction); 778d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * </pre> 779d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 780d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will run the action immediately.</p> 781d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 782d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 783d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object and running the action 784d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in that listener's {@link ViewPropertyAnimatorListener#onAnimationEnd(View)} method.</p> 785d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 786d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param runnable The action to run when the next animation ends. 787d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 788d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 789d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withEndAction(Runnable runnable) { 790d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 791d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 792ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withEndAction(this, view, runnable); 793d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 794d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 795d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 796d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 797d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 798d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the current duration of property animations. If the duration was set on this 799d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * object, that value is returned. Otherwise, the default value of the underlying Animator 800d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is returned. 801d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 802d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return 0.</p> 803d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 804d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see #setDuration(long) 805d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The duration of animations, in milliseconds. 806d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 807d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getDuration() { 808d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 809d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 810ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getDuration(this, view); 811d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 812d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 813d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 814d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 815d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 816d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 817d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the interpolator for the underlying animator that animates the requested properties. 818d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default interpolator for ValueAnimator. Calling this method 819d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared object to be used instead. 820d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 821d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 822d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 823d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The TimeInterpolator to be used for ensuing property animations. 824d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 825d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 826d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setInterpolator(Interpolator value) { 827d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 828d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 829ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setInterpolator(this, view, value); 830d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 831d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 832d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 833d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 834d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 835d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the timing interpolator that this animation uses. 836d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 837d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return null.</p> 838d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 839d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The timing interpolator for this animation. 840d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 841d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public Interpolator getInterpolator() { 842d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 843d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 844ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getInterpolator(this, view); 845d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 846d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase else return null; 847d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 848d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 849d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 850d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the startDelay for the underlying animator that animates the requested properties. 851d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default value for ValueAnimator. Calling this method 852d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared value to be used instead. 853d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 854d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 855d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 856d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The delay of ensuing property animations, in milliseconds. The value 857d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * cannot be negative. 858d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 859d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 860d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setStartDelay(long value) { 861d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 862d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 863ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setStartDelay(this, view, value); 864d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 865d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 866d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 867d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 868d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 869d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the current startDelay of property animations. If the startDelay was set on this 870d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * object, that value is returned. Otherwise, the default value of the underlying Animator 871d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is returned. 872d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 873d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return 0.</p> 874d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 875d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see #setStartDelay(long) 876d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The startDelay of animations, in milliseconds. 877d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 878d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getStartDelay() { 879d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 880d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 881ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getStartDelay(this, view); 882d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 883d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 884d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 885d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 886d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 887d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 888d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotation</code> property to be animated to the 889d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 890d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 891d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 892d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 893d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 894d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 895d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 896d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotation(float value) { 897d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 898d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 899ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotation(this, view, value); 900d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 901d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 902d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 903d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 904d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 905d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotation</code> property to be animated by the 906d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 907d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 908d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 909d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 910d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 911d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 912d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 913d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationBy(float value) { 914d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 915d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 916ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationBy(this, view, value); 917d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 918d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 919d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 920d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 921d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 922d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationX</code> property to be animated to the 923d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 924d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 925d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 926d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 927d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 928d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 929d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 930d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationX(float value) { 931d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 932d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 933ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationX(this, view, value); 934d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 935d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 936d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 937d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 938d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 939d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationX</code> property to be animated by the 940d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 941d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 942d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 943d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 944d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 945d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 946d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 947d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationXBy(float value) { 948d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 949d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 950ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationXBy(this, view, value); 951d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 952d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 953d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 954d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 955d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 956d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationY</code> property to be animated to the 957d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 958d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 959d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 960d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 961d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 962d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 963d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 964d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationY(float value) { 965d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 966d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 967ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationY(this, view, value); 968d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 969d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 970d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 971d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 972d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 973d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationY</code> property to be animated by the 974d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 975d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 976d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 977d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 978d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 979d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 980d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 981d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationYBy(float value) { 982d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 983d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 984ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationYBy(this, view, value); 985d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 986d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 987d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 988d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 989d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 990d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleX</code> property to be animated to the 991d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 992d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 993d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 994d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 995d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 996d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 997d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 998d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleX(float value) { 999d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1000d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1001ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleX(this, view, value); 1002d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1003d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1004d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1005d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1006d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1007d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleX</code> property to be animated by the 1008d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1009d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1010d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1011d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1012d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1013d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1014d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1015d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleXBy(float value) { 1016d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1017d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1018ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleXBy(this, view, value); 1019d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1020d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1021d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1022d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1023d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1024d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleY</code> property to be animated to the 1025d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1026d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1027d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1028d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1029d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 1030d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1031d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1032d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleY(float value) { 1033d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1034d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1035ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleY(this, view, value); 1036d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1037d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1038d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1039d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1040d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1041d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleY</code> property to be animated by the 1042d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1043d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1044d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1045d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1046d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1047d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1048d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1049d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleYBy(float value) { 1050d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1051d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1052ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleYBy(this, view, value); 1053d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1054d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1055d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1056d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1057d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1058d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Cancels all property animations that are currently running or pending. 1059d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1060d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void cancel() { 1061d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1062d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1063ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.cancel(this, view); 1064d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1065d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1066d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1067d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1068d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>x</code> property to be animated to the 1069d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1070d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1071d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1072d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1073d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 1074d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1075d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1076d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat x(float value) { 1077d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1078d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1079ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.x(this, view, value); 1080d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1081d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1082d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1083d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1084d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1085d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>x</code> property to be animated by the 1086d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1087d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1088d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1089d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1090d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1091d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1092d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1093d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat xBy(float value) { 1094d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1095d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1096ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.xBy(this, view, value); 1097d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1098d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1099d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1100d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1102d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>y</code> property to be animated to the 1103d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1104d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1105d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1106d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1107d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 1108d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1109d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1110d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat y(float value) { 1111d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1112d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1113ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.y(this, view, value); 1114d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1115d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1116d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1117d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1118d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1119d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>y</code> property to be animated by the 1120d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1121d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1122d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1123d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1124d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1125d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1126d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1127d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat yBy(float value) { 1128d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1129d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1130ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.yBy(this, view, value); 1131d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1132d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1133d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1134d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1135d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1136d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationX</code> property to be animated by the 1137d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1138d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1139d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1140d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1141d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1142d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1143d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1144d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationXBy(float value) { 1145d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1146d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1147ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationXBy(this, view, value); 1148d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1149d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1150d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1151d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1152d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1153d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationY</code> property to be animated by the 1154d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1155d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1156d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1157d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1158d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1159d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1160d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1161d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationYBy(float value) { 1162d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1163d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1164ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationYBy(this, view, value); 1165d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1166d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1167d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1168d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1169d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1170e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * This method will cause the View's <code>translationZ</code> property to be animated by the 1171e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * specified value. Animations already running on the property will be canceled. 1172e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1173e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * <p>Prior to API 21, this method will do nothing.</p> 1174e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1175e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @param value The amount to be animated by, as an offset from the current value. 1176e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @return This object, allowing calls to methods in this class to be chained. 1177e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes */ 1178e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public ViewPropertyAnimatorCompat translationZBy(float value) { 1179e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes View view; 1180e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if ((view = mView.get()) != null) { 1181e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL.translationZBy(this, view, value); 1182e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1183e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes return this; 1184e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1185e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 1186e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes /** 1187e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * This method will cause the View's <code>translationZ</code> property to be animated to the 1188e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * specified value. Animations already running on the property will be canceled. 1189e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1190e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * <p>Prior to API 21, this method will do nothing.</p> 1191e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1192e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @param value The amount to be animated by, as an offset from the current value. 1193e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @return This object, allowing calls to methods in this class to be chained. 1194e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes */ 1195e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public ViewPropertyAnimatorCompat translationZ(float value) { 1196e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes View view; 1197e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if ((view = mView.get()) != null) { 1198e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL.translationZ(this, view, value); 1199e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1200e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes return this; 1201e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1202e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 1203e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes /** 1204e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * This method will cause the View's <code>z</code> property to be animated to the 1205e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * specified value. Animations already running on the property will be canceled. 1206e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1207e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * <p>Prior to API 21, this method will do nothing.</p> 1208e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1209e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @param value The amount to be animated by, as an offset from the current value. 1210e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @return This object, allowing calls to methods in this class to be chained. 1211e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes */ 1212e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public ViewPropertyAnimatorCompat z(float value) { 1213e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes View view; 1214e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if ((view = mView.get()) != null) { 1215e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL.z(this, view, value); 1216e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1217e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes return this; 1218e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1219e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 1220e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes /** 1221e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * This method will cause the View's <code>z</code> property to be animated by the 1222e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * specified value. Animations already running on the property will be canceled. 1223e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1224e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * <p>Prior to API 21, this method will do nothing.</p> 1225e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1226e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @param value The amount to be animated by, as an offset from the current value. 1227e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @return This object, allowing calls to methods in this class to be chained. 1228e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes */ 1229e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public ViewPropertyAnimatorCompat zBy(float value) { 1230e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes View view; 1231e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if ((view = mView.get()) != null) { 1232e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL.zBy(this, view, value); 1233e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1234e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes return this; 1235e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1236e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 1237e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes /** 1238d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Starts the currently pending property animations immediately. Calling <code>start()</code> 1239d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is optional because all animations start automatically at the next opportunity. However, 1240d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * if the animations are needed to start immediately and synchronously (not at the time when 1241d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the next event is processed by the hierarchy, which is when the animations would begin 1242d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * otherwise), then this method can be used. 1243d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1244d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1245d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1246d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void start() { 1247d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1248d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1249ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.start(this, view); 1250d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1251d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1252d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1253d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1254d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * The View associated with this ViewPropertyAnimator will have its 1255d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#setLayerType(View, int, android.graphics.Paint) layer type} set to 1256d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#LAYER_TYPE_HARDWARE} for the duration of the next animation. 1257d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * As stated in the documentation for {@link ViewCompat#LAYER_TYPE_HARDWARE}, 1258d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the actual type of layer used internally depends on the runtime situation of the 1259d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view. If the activity and this view are hardware-accelerated, then the layer will be 1260d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * accelerated as well. If the activity or the view is not accelerated, then the layer will 1261d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * effectively be the same as {@link ViewCompat#LAYER_TYPE_SOFTWARE}. 1262d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1263d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>This state is not persistent, either on the View or on this ViewPropertyAnimator: the 1264d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * layer type of the View will be restored when the animation ends to what it was when this 1265d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * method was called, and this setting on ViewPropertyAnimator is only valid for the next 1266d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * animation. Note that calling this method and then independently setting the layer type of 1267d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the View (by a direct call to 1268d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#setLayerType(View, int, android.graphics.Paint)}) will result in some 1269d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * inconsistency, including having the layer type restored to its pre-withLayer() 1270d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * value when the animation ends.</p> 1271d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1272d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1273d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1274d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 1275d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object, setting a hardware layer in 1276d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the listener's {@link ViewPropertyAnimatorListener#onAnimationStart(View)} method, 1277d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * and then restoring the orignal layer type in the listener's 1278d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewPropertyAnimatorListener#onAnimationEnd(View)} method.</p> 1279d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1280d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see View#setLayerType(int, android.graphics.Paint) 1281d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1282d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1283d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withLayer() { 1284d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1285d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1286ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withLayer(this, view); 1287d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1288d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1289d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1290d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1291d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1292d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Specifies an action to take place when the next animation runs. If there is a 1293d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link #setStartDelay(long) startDelay} set on this ViewPropertyAnimator, then the 1294d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * action will run after that startDelay expires, when the actual animation begins. 1295d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method, along with {@link #withEndAction(Runnable)}, is intended to help facilitate 1296d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * choreographing ViewPropertyAnimator animations with other animations or actions 1297d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in the application. 1298d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1299d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will run the action immediately.</p> 1300d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1301d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 1302d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object and running the action 1303d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in that listener's {@link ViewPropertyAnimatorListener#onAnimationStart(View)} method.</p> 1304d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1305d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param runnable The action to run when the next animation starts. 1306d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1307d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1308d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withStartAction(Runnable runnable) { 1309d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1310d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1311ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withStartAction(this, view, runnable); 1312d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1313d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1314d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1315d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1316d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1317d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets a listener for events in the underlying Animators that run the property 1318d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * animations. 1319d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1320d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1321d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1322d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param listener The listener to be called with AnimatorListener events. A value of 1323d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <code>null</code> removes any existing listener. 1324d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1325d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1326d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setListener(ViewPropertyAnimatorListener listener) { 1327d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1328d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1329ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setListener(this, view, listener); 1330d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1331d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1332d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 133349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 133449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes /** 133549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * Sets a listener for update events in the underlying Animator that runs 133649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * the property animations. 133749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * 133849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * <p>Prior to API 19, this method will do nothing.</p> 133949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * 134049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @param listener The listener to be called with update events. A value of 134149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * <code>null</code> removes any existing listener. 134249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @return This object, allowing calls to methods in this class to be chained. 134349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes */ 134449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes public ViewPropertyAnimatorCompat setUpdateListener( 134549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes ViewPropertyAnimatorUpdateListener listener) { 134649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes View view; 134749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes if ((view = mView.get()) != null) { 1348ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setUpdateListener(this, view, listener); 134949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 135049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes return this; 135149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 1352d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase} 1353