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 18d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport android.view.View; 19d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport android.view.animation.Interpolator; 20d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 21d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport java.lang.ref.WeakReference; 22797c82a7055f7ba825169388465617f0db716739Chet Haaseimport java.util.WeakHashMap; 23d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 24d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haasepublic class ViewPropertyAnimatorCompat { 25d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase private static final String TAG = "ViewAnimatorCompat"; 26d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase private WeakReference<View> mView; 27ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Runnable mStartAction = null; 28ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Runnable mEndAction = null; 29ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private int mOldLayerType = -1; 30ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase // HACK ALERT! Choosing this id knowing that the framework does not use it anywhere 31ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase // internally and apps should use ids higher than it 32ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase static final int LISTENER_TAG_ID = 0x7e000000; 33ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 34d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet 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; 301797c82a7055f7ba825169388465617f0db716739Chet Haase if (startAction != null) { 302797c82a7055f7ba825169388465617f0db716739Chet Haase startAction.run(); 303797c82a7055f7ba825169388465617f0db716739Chet Haase } 304797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 305797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationStart(view); 306797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationEnd(view); 307797c82a7055f7ba825169388465617f0db716739Chet Haase } 308797c82a7055f7ba825169388465617f0db716739Chet Haase if (endAction != null) { 309797c82a7055f7ba825169388465617f0db716739Chet Haase endAction.run(); 310797c82a7055f7ba825169388465617f0db716739Chet Haase } 311797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 312797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap.remove(view); 313797c82a7055f7ba825169388465617f0db716739Chet Haase } 314797c82a7055f7ba825169388465617f0db716739Chet Haase } 315797c82a7055f7ba825169388465617f0db716739Chet Haase 316797c82a7055f7ba825169388465617f0db716739Chet Haase class Starter implements Runnable { 317797c82a7055f7ba825169388465617f0db716739Chet Haase WeakReference<View> mViewRef; 318ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompat mVpa; 319797c82a7055f7ba825169388465617f0db716739Chet Haase 320ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Starter(ViewPropertyAnimatorCompat vpa, View view) { 321797c82a7055f7ba825169388465617f0db716739Chet Haase mViewRef = new WeakReference<View>(view); 322ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa = vpa; 323797c82a7055f7ba825169388465617f0db716739Chet Haase } 324797c82a7055f7ba825169388465617f0db716739Chet Haase 325797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 326797c82a7055f7ba825169388465617f0db716739Chet Haase public void run() { 3273a91bf644ea3e07a52da5f1741b9b229493c84f9Yigit Boyar final View view = mViewRef.get(); 3283a91bf644ea3e07a52da5f1741b9b229493c84f9Yigit Boyar if (view != null) { 3293a91bf644ea3e07a52da5f1741b9b229493c84f9Yigit Boyar startAnimation(mVpa, view); 3303a91bf644ea3e07a52da5f1741b9b229493c84f9Yigit Boyar } 331797c82a7055f7ba825169388465617f0db716739Chet Haase } 332797c82a7055f7ba825169388465617f0db716739Chet Haase }; 333797c82a7055f7ba825169388465617f0db716739Chet Haase 334797c82a7055f7ba825169388465617f0db716739Chet Haase private void removeStartMessage(View view) { 335797c82a7055f7ba825169388465617f0db716739Chet Haase Runnable starter = null; 336797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 337797c82a7055f7ba825169388465617f0db716739Chet Haase starter = mStarterMap.get(view); 338797c82a7055f7ba825169388465617f0db716739Chet Haase if (starter != null) { 339797c82a7055f7ba825169388465617f0db716739Chet Haase view.removeCallbacks(starter); 340797c82a7055f7ba825169388465617f0db716739Chet Haase } 341797c82a7055f7ba825169388465617f0db716739Chet Haase } 342797c82a7055f7ba825169388465617f0db716739Chet Haase } 343797c82a7055f7ba825169388465617f0db716739Chet Haase 344ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private void postStartMessage(ViewPropertyAnimatorCompat vpa, View view) { 345797c82a7055f7ba825169388465617f0db716739Chet Haase Runnable starter = null; 346797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 347797c82a7055f7ba825169388465617f0db716739Chet Haase starter = mStarterMap.get(view); 348797c82a7055f7ba825169388465617f0db716739Chet Haase } 349797c82a7055f7ba825169388465617f0db716739Chet Haase if (starter == null) { 350ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase starter = new Starter(vpa, view); 351797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap == null) { 352797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap = new WeakHashMap<View, Runnable>(); 353797c82a7055f7ba825169388465617f0db716739Chet Haase } 354797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap.put(view, starter); 355797c82a7055f7ba825169388465617f0db716739Chet Haase } 356797c82a7055f7ba825169388465617f0db716739Chet Haase view.removeCallbacks(starter); 357797c82a7055f7ba825169388465617f0db716739Chet Haase view.post(starter); 358797c82a7055f7ba825169388465617f0db716739Chet Haase } 359797c82a7055f7ba825169388465617f0db716739Chet Haase 360d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 361d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 362d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class ICSViewPropertyAnimatorCompatImpl extends BaseViewPropertyAnimatorCompatImpl { 363797c82a7055f7ba825169388465617f0db716739Chet Haase WeakHashMap<View, Integer> mLayerMap = null; 364d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 365d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 366ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setDuration(ViewPropertyAnimatorCompat vpa, View view, long value) { 367d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setDuration(view, value); 368d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 369d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 370d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 371ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alpha(ViewPropertyAnimatorCompat vpa, View view, float value) { 372d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.alpha(view, value); 373d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 374d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 375d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 376ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 377d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationX(view, value); 378d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 379d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 380d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 381ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 382d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationY(view, value); 383d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 384d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 385d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 386ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getDuration(ViewPropertyAnimatorCompat vpa, View view) { 387d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return ViewPropertyAnimatorCompatICS.getDuration(view); 388d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 389d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 390d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 391ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setInterpolator(ViewPropertyAnimatorCompat vpa, View view, Interpolator value) { 392d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setInterpolator(view, value); 393d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 394d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 395d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 396ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setStartDelay(ViewPropertyAnimatorCompat vpa, View view, long value) { 397d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setStartDelay(view, value); 398d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 399d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 400d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 401ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getStartDelay(ViewPropertyAnimatorCompat vpa, View view) { 402d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return ViewPropertyAnimatorCompatICS.getStartDelay(view); 403d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 404d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 405d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 406ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alphaBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 407d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.alphaBy(view, value); 408d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 409d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 410d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 411ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotation(ViewPropertyAnimatorCompat vpa, View view, float value) { 412d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotation(view, value); 413d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 414d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 415d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 416ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 417d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationBy(view, value); 418d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 419d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 420d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 421ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 422d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationX(view, value); 423d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 424d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 425d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 426ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 427d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationXBy(view, value); 428d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 429d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 430d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 431ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 432d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationY(view, value); 433d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 434d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 435d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 436ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 437d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationYBy(view, value); 438d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 439d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 440d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 441ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleX(ViewPropertyAnimatorCompat vpa, View view, float value) { 442d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleX(view, value); 443d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 444d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 445d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 446ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 447d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleXBy(view, value); 448d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 449d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 450d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 451ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleY(ViewPropertyAnimatorCompat vpa, View view, float value) { 452d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleY(view, value); 453d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 454d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 455d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 456ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 457d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleYBy(view, value); 458d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 459d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 460d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 461ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void cancel(ViewPropertyAnimatorCompat vpa, View view) { 462d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.cancel(view); 463d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 464d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 465d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 466ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void x(ViewPropertyAnimatorCompat vpa, View view, float value) { 467d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.x(view, value); 468d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 469d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 470d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 471ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void xBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 472d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.xBy(view, value); 473d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 474d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 475d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 476ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void y(ViewPropertyAnimatorCompat vpa, View view, float value) { 477d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.y(view, value); 478d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 479d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 480d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 481ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void yBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 482d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.yBy(view, value); 483d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 484d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 485d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 486ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 487d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationXBy(view, value); 488d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 489d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 490d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 491ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 492d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationYBy(view, value); 493d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 494d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 495d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 496ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void start(ViewPropertyAnimatorCompat vpa, View view) { 497d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.start(view); 498d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 499d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 500d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 501ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorListener listener) { 502ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase view.setTag(LISTENER_TAG_ID, listener); 503ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 504d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 505d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 506d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 507ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, final Runnable runnable) { 508ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 509ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mEndAction = runnable; 510d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 511d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 512d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 513ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, final Runnable runnable) { 514ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 515ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mStartAction = runnable; 516d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 517d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 518d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 519ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view) { 520ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mOldLayerType = ViewCompat.getLayerType(view); 521ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 522797c82a7055f7ba825169388465617f0db716739Chet Haase } 523797c82a7055f7ba825169388465617f0db716739Chet Haase 524ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase static class MyVpaListener implements ViewPropertyAnimatorListener { 525ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 526ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompat mVpa; 527ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 528ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase MyVpaListener(ViewPropertyAnimatorCompat vpa) { 529ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa = vpa; 530ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 531ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 532797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 533797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationStart(View view) { 534ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mOldLayerType >= 0) { 535d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewCompat.setLayerType(view, ViewCompat.LAYER_TYPE_HARDWARE, null); 536d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 537ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mStartAction != null) { 538ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa.mStartAction.run(); 539ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 540ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 541ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 542ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 543ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 544797c82a7055f7ba825169388465617f0db716739Chet Haase } 545797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 546797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationStart(view); 547797c82a7055f7ba825169388465617f0db716739Chet Haase } 548797c82a7055f7ba825169388465617f0db716739Chet Haase } 549ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 550797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 551797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationEnd(View view) { 552ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mOldLayerType >= 0) { 553ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewCompat.setLayerType(view, mVpa.mOldLayerType, null); 554ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa.mOldLayerType = -1; 555ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 556ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mEndAction != null) { 557ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa.mEndAction.run(); 558ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 559ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 560ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 561ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 562ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 563797c82a7055f7ba825169388465617f0db716739Chet Haase } 564797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 565797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationEnd(view); 566797c82a7055f7ba825169388465617f0db716739Chet Haase } 567797c82a7055f7ba825169388465617f0db716739Chet Haase } 568d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 569797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 570797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationCancel(View view) { 571ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 572ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 573ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 574ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 575ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 576797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 577797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationCancel(view); 578d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 579797c82a7055f7ba825169388465617f0db716739Chet Haase } 580797c82a7055f7ba825169388465617f0db716739Chet Haase }; 581d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 582d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 583d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class JBViewPropertyAnimatorCompatImpl extends ICSViewPropertyAnimatorCompatImpl { 584d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 585d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 586ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorListener listener) { 587ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatJB.setListener(view, listener); 588ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 589ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 590ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase @Override 591ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 592d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withStartAction(view, runnable); 593d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 594d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 595d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 596ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 597d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withEndAction(view, runnable); 598d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 599d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 600d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 601ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view) { 602d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withLayer(view); 603d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 604d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 605d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 606d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class JBMr2ViewPropertyAnimatorCompatImpl extends JBViewPropertyAnimatorCompatImpl { 607d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 608d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 609ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public Interpolator getInterpolator(ViewPropertyAnimatorCompat vpa, View view) { 610d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return (Interpolator) ViewPropertyAnimatorCompatJellybeanMr2.getInterpolator(view); 611d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 612d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 613d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 61449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes static class KitKatViewPropertyAnimatorCompatImpl extends JBMr2ViewPropertyAnimatorCompatImpl { 61549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes @Override 616ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setUpdateListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorUpdateListener listener) { 61749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes ViewPropertyAnimatorCompatKK.setUpdateListener(view, listener); 61849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 61949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 62049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 621e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes static class LollipopViewPropertyAnimatorCompatImpl extends KitKatViewPropertyAnimatorCompatImpl { 622e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 623e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void translationZ(ViewPropertyAnimatorCompat vpa, View view, float value) { 624e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes ViewPropertyAnimatorCompatLollipop.translationZ(view, value); 625e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 626e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 627e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 628e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void translationZBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 629e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes ViewPropertyAnimatorCompatLollipop.translationZBy(view, value); 630e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 631e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 632e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 633e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void z(ViewPropertyAnimatorCompat vpa, View view, float value) { 634e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes ViewPropertyAnimatorCompatLollipop.z(view, value); 635e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 636e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 637e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes @Override 638e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public void zBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 639e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes ViewPropertyAnimatorCompatLollipop.zBy(view, value); 640e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 641e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 642e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 643d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static final ViewPropertyAnimatorCompatImpl IMPL; 644d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static { 645d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase final int version = android.os.Build.VERSION.SDK_INT; 646e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if (version >= 21) { 647e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL = new LollipopViewPropertyAnimatorCompatImpl(); 648e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } else if (version >= 19) { 64949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes IMPL = new KitKatViewPropertyAnimatorCompatImpl(); 65049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } else if (version >= 18) { 651d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new JBMr2ViewPropertyAnimatorCompatImpl(); 652d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else if (version >= 16) { 653d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new JBViewPropertyAnimatorCompatImpl(); 654d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else if (version >= 14) { 655d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new ICSViewPropertyAnimatorCompatImpl(); 656d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 657d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new BaseViewPropertyAnimatorCompatImpl(); 658d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 659d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 660d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 661d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 662d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the duration for the underlying animator that animates the requested properties. 663d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default value for ValueAnimator. Calling this method 664d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared value to be used instead. 665d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 666d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 667d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 668d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The length of ensuing property animations, in milliseconds. The value 669d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * cannot be negative. 670d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 671d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 672d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setDuration(long value) { 673d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 674d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 675ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setDuration(this, view, value); 676d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 677d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 678d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 679d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 680d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 681d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>alpha</code> property to be animated to the 682d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 683d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 684d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 685d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 686d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 687d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 688d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 689d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat alpha(float value) { 690d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 691d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 692ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.alpha(this, view, value); 693d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 694d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 695d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 696d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 697d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 698d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>alpha</code> property to be animated by the 699d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 700d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 701d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 702d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 703d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 704d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 705d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 706d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat alphaBy(float value) { 707d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 708d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 709ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.alphaBy(this, view, value); 710d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 711d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 712d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 713d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 714d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 715d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationX</code> property to be animated to the 716d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 717d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 718d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 719d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 720d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 721d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 722d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 723d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationX(float value) { 724d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 725d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 726ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationX(this, view, value); 727d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 728d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 729d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 730d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 731d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 732d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationY</code> property to be animated to the 733d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 734d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 735d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 736d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 737d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 738d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 739d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 740d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationY(float value) { 741d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 742d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 743ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationY(this, view, value); 744d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 745d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 746d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 747d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 748d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 749d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Specifies an action to take place when the next animation ends. The action is only 750d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * run if the animation ends normally; if the ViewPropertyAnimator is canceled during 751d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * that animation, the runnable will not run. 752d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method, along with {@link #withStartAction(Runnable)}, is intended to help facilitate 753d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * choreographing ViewPropertyAnimator animations with other animations or actions 754d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in the application. 755d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 756d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For example, the following code animates a view to x=200 and then back to 0:</p> 757d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <pre> 758d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Runnable endAction = new Runnable() { 759d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * public void run() { 760d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view.animate().x(0); 761d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * } 762d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * }; 763d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view.animate().x(200).withEndAction(endAction); 764d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * </pre> 765d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 766d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will run the action immediately.</p> 767d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 768d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 769d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object and running the action 770d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in that listener's {@link ViewPropertyAnimatorListener#onAnimationEnd(View)} method.</p> 771d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 772d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param runnable The action to run when the next animation ends. 773d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 774d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 775d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withEndAction(Runnable runnable) { 776d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 777d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 778ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withEndAction(this, view, runnable); 779d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 780d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 781d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 782d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 783d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 784d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the current duration of property animations. If the duration was set on this 785d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * object, that value is returned. Otherwise, the default value of the underlying Animator 786d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is returned. 787d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 788d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return 0.</p> 789d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 790d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see #setDuration(long) 791d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The duration of animations, in milliseconds. 792d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 793d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getDuration() { 794d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 795d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 796ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getDuration(this, view); 797d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 798d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 799d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 800d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 801d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 802d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 803d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the interpolator for the underlying animator that animates the requested properties. 804d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default interpolator for ValueAnimator. Calling this method 805d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared object to be used instead. 806d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 807d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 808d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 809d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The TimeInterpolator to be used for ensuing property animations. 810d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 811d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 812d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setInterpolator(Interpolator value) { 813d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 814d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 815ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setInterpolator(this, view, value); 816d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 817d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 818d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 819d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 820d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 821d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the timing interpolator that this animation uses. 822d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 823d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return null.</p> 824d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 825d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The timing interpolator for this animation. 826d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 827d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public Interpolator getInterpolator() { 828d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 829d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 830ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getInterpolator(this, view); 831d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 832d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase else return null; 833d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 834d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 835d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 836d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the startDelay for the underlying animator that animates the requested properties. 837d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default value for ValueAnimator. Calling this method 838d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared value to be used instead. 839d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 840d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 841d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 842d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The delay of ensuing property animations, in milliseconds. The value 843d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * cannot be negative. 844d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 845d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 846d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setStartDelay(long value) { 847d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 848d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 849ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setStartDelay(this, view, value); 850d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 851d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 852d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 853d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 854d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 855d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the current startDelay of property animations. If the startDelay was set on this 856d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * object, that value is returned. Otherwise, the default value of the underlying Animator 857d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is returned. 858d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 859d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return 0.</p> 860d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 861d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see #setStartDelay(long) 862d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The startDelay of animations, in milliseconds. 863d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 864d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getStartDelay() { 865d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 866d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 867ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getStartDelay(this, view); 868d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 869d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 870d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 871d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 872d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 873d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 874d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotation</code> property to be animated to the 875d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 876d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 877d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 878d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 879d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 880d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 881d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 882d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotation(float value) { 883d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 884d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 885ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotation(this, view, value); 886d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 887d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 888d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 889d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 890d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 891d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotation</code> property to be animated by the 892d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 893d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 894d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 895d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 896d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 897d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 898d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 899d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationBy(float value) { 900d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 901d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 902ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationBy(this, view, value); 903d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 904d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 905d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 906d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 907d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 908d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationX</code> property to be animated to the 909d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 910d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 911d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 912d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 913d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 914d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 915d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 916d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationX(float value) { 917d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 918d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 919ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationX(this, view, value); 920d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 921d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 922d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 923d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 924d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 925d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationX</code> property to be animated by the 926d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 927d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 928d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 929d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 930d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 931d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 932d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 933d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationXBy(float value) { 934d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 935d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 936ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationXBy(this, view, value); 937d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 938d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 939d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 940d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 941d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 942d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationY</code> property to be animated to the 943d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 944d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 945d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 946d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 947d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 948d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 949d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 950d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationY(float value) { 951d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 952d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 953ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationY(this, view, value); 954d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 955d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 956d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 957d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 958d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 959d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationY</code> property to be animated by the 960d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 961d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 962d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 963d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 964d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 965d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 966d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 967d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationYBy(float value) { 968d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 969d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 970ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationYBy(this, view, value); 971d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 972d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 973d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 974d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 975d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 976d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleX</code> property to be animated to the 977d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 978d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 979d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 980d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 981d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 982d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 983d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 984d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleX(float value) { 985d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 986d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 987ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleX(this, view, value); 988d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 989d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 990d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 991d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 992d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 993d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleX</code> property to be animated by the 994d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 995d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 996d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 997d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 998d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 999d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1000d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1001d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleXBy(float value) { 1002d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1003d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1004ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleXBy(this, view, value); 1005d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1006d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1007d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1008d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1009d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1010d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleY</code> property to be animated to the 1011d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1012d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1013d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1014d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1015d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 1016d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1017d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1018d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleY(float value) { 1019d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1020d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1021ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleY(this, view, value); 1022d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1023d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1024d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1025d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1026d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1027d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleY</code> property to be animated by the 1028d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1029d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1030d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1031d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1032d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1033d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1034d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1035d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleYBy(float value) { 1036d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1037d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1038ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleYBy(this, view, value); 1039d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1040d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1041d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1042d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1043d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1044d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Cancels all property animations that are currently running or pending. 1045d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1046d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void cancel() { 1047d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1048d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1049ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.cancel(this, view); 1050d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1051d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1052d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1053d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1054d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>x</code> property to be animated to the 1055d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1056d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1057d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1058d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1059d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 1060d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1061d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1062d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat x(float value) { 1063d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1064d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1065ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.x(this, view, value); 1066d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1067d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1068d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1069d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1070d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1071d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>x</code> property to be animated by the 1072d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1073d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1074d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1075d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1076d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1077d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1078d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1079d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat xBy(float value) { 1080d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1081d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1082ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.xBy(this, view, value); 1083d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1084d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1085d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1086d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1087d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1088d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>y</code> property to be animated to the 1089d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1090d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1091d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1092d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1093d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 1094d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1095d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1096d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat y(float value) { 1097d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1098d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1099ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.y(this, view, value); 1100d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1102d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1103d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1104d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1105d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>y</code> property to be animated by the 1106d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1107d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1108d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1109d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1110d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1111d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1112d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1113d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat yBy(float value) { 1114d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1115d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1116ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.yBy(this, view, value); 1117d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1118d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1119d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1120d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1121d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1122d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationX</code> property to be animated by the 1123d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1124d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1125d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1126d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1127d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1128d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1129d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1130d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationXBy(float value) { 1131d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1132d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1133ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationXBy(this, view, value); 1134d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1135d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1136d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1137d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1138d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1139d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationY</code> property to be animated by the 1140d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1141d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1142d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1143d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1144d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1145d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1146d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1147d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationYBy(float value) { 1148d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1149d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1150ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationYBy(this, view, value); 1151d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1152d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1153d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1154d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1155d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1156e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * This method will cause the View's <code>translationZ</code> property to be animated by the 1157e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * specified value. Animations already running on the property will be canceled. 1158e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1159e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * <p>Prior to API 21, this method will do nothing.</p> 1160e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1161e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @param value The amount to be animated by, as an offset from the current value. 1162e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @return This object, allowing calls to methods in this class to be chained. 1163e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes */ 1164e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public ViewPropertyAnimatorCompat translationZBy(float value) { 1165e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes View view; 1166e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if ((view = mView.get()) != null) { 1167e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL.translationZBy(this, view, value); 1168e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1169e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes return this; 1170e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1171e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 1172e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes /** 1173e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * This method will cause the View's <code>translationZ</code> property to be animated to the 1174e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * specified value. Animations already running on the property will be canceled. 1175e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1176e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * <p>Prior to API 21, this method will do nothing.</p> 1177e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1178e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @param value The amount to be animated by, as an offset from the current value. 1179e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @return This object, allowing calls to methods in this class to be chained. 1180e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes */ 1181e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public ViewPropertyAnimatorCompat translationZ(float value) { 1182e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes View view; 1183e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if ((view = mView.get()) != null) { 1184e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL.translationZ(this, view, value); 1185e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1186e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes return this; 1187e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1188e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 1189e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes /** 1190e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * This method will cause the View's <code>z</code> property to be animated to the 1191e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * specified value. Animations already running on the property will be canceled. 1192e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1193e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * <p>Prior to API 21, this method will do nothing.</p> 1194e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1195e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @param value The amount to be animated by, as an offset from the current value. 1196e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @return This object, allowing calls to methods in this class to be chained. 1197e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes */ 1198e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public ViewPropertyAnimatorCompat z(float value) { 1199e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes View view; 1200e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if ((view = mView.get()) != null) { 1201e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL.z(this, view, value); 1202e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1203e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes return this; 1204e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1205e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 1206e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes /** 1207e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * This method will cause the View's <code>z</code> property to be animated by the 1208e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * specified value. Animations already running on the property will be canceled. 1209e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1210e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * <p>Prior to API 21, this method will do nothing.</p> 1211e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * 1212e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @param value The amount to be animated by, as an offset from the current value. 1213e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes * @return This object, allowing calls to methods in this class to be chained. 1214e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes */ 1215e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes public ViewPropertyAnimatorCompat zBy(float value) { 1216e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes View view; 1217e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes if ((view = mView.get()) != null) { 1218e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes IMPL.zBy(this, view, value); 1219e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1220e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes return this; 1221e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes } 1222e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes 1223e322b8bcc717dfd663677ed5cb59c6d1c3cb27afChris Banes /** 1224d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Starts the currently pending property animations immediately. Calling <code>start()</code> 1225d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is optional because all animations start automatically at the next opportunity. However, 1226d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * if the animations are needed to start immediately and synchronously (not at the time when 1227d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the next event is processed by the hierarchy, which is when the animations would begin 1228d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * otherwise), then this method can be used. 1229d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1230d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1231d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1232d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void start() { 1233d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1234d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1235ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.start(this, view); 1236d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1237d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1238d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1239d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1240d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * The View associated with this ViewPropertyAnimator will have its 1241d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#setLayerType(View, int, android.graphics.Paint) layer type} set to 1242d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#LAYER_TYPE_HARDWARE} for the duration of the next animation. 1243d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * As stated in the documentation for {@link ViewCompat#LAYER_TYPE_HARDWARE}, 1244d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the actual type of layer used internally depends on the runtime situation of the 1245d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view. If the activity and this view are hardware-accelerated, then the layer will be 1246d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * accelerated as well. If the activity or the view is not accelerated, then the layer will 1247d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * effectively be the same as {@link ViewCompat#LAYER_TYPE_SOFTWARE}. 1248d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1249d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>This state is not persistent, either on the View or on this ViewPropertyAnimator: the 1250d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * layer type of the View will be restored when the animation ends to what it was when this 1251d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * method was called, and this setting on ViewPropertyAnimator is only valid for the next 1252d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * animation. Note that calling this method and then independently setting the layer type of 1253d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the View (by a direct call to 1254d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#setLayerType(View, int, android.graphics.Paint)}) will result in some 1255d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * inconsistency, including having the layer type restored to its pre-withLayer() 1256d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * value when the animation ends.</p> 1257d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1258d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1259d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1260d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 1261d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object, setting a hardware layer in 1262d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the listener's {@link ViewPropertyAnimatorListener#onAnimationStart(View)} method, 1263d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * and then restoring the orignal layer type in the listener's 1264d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewPropertyAnimatorListener#onAnimationEnd(View)} method.</p> 1265d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1266d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see View#setLayerType(int, android.graphics.Paint) 1267d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1268d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1269d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withLayer() { 1270d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1271d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1272ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withLayer(this, view); 1273d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1274d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1275d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1276d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1277d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1278d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Specifies an action to take place when the next animation runs. If there is a 1279d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link #setStartDelay(long) startDelay} set on this ViewPropertyAnimator, then the 1280d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * action will run after that startDelay expires, when the actual animation begins. 1281d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method, along with {@link #withEndAction(Runnable)}, is intended to help facilitate 1282d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * choreographing ViewPropertyAnimator animations with other animations or actions 1283d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in the application. 1284d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1285d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will run the action immediately.</p> 1286d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1287d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 1288d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object and running the action 1289d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in that listener's {@link ViewPropertyAnimatorListener#onAnimationStart(View)} method.</p> 1290d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1291d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param runnable The action to run when the next animation starts. 1292d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1293d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1294d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withStartAction(Runnable runnable) { 1295d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1296d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1297ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withStartAction(this, view, runnable); 1298d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1299d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1300d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1301d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1302d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1303d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets a listener for events in the underlying Animators that run the property 1304d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * animations. 1305d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1306d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1307d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1308d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param listener The listener to be called with AnimatorListener events. A value of 1309d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <code>null</code> removes any existing listener. 1310d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1311d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1312d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setListener(ViewPropertyAnimatorListener listener) { 1313d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1314d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1315ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setListener(this, view, listener); 1316d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1317d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1318d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 131949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 132049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes /** 132149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * Sets a listener for update events in the underlying Animator that runs 132249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * the property animations. 132349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * 132449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * <p>Prior to API 19, this method will do nothing.</p> 132549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * 132649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @param listener The listener to be called with update events. A value of 132749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * <code>null</code> removes any existing listener. 132849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @return This object, allowing calls to methods in this class to be chained. 132949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes */ 133049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes public ViewPropertyAnimatorCompat setUpdateListener( 133149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes ViewPropertyAnimatorUpdateListener listener) { 133249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes View view; 133349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes if ((view = mView.get()) != null) { 1334ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setUpdateListener(this, view, listener); 133549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 133649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes return this; 133749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 1338d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase} 1339