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