ViewPropertyAnimatorCompat.java revision ead7065c8e987fefca4d0d850d824fb7d7bce677
1d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase/* 2d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Copyright (C) 2014 The Android Open Source Project 3d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 4d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * you may not use this file except in compliance with the License. 6d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * You may obtain a copy of the License at 7d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 8d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * http://www.apache.org/licenses/LICENSE-2.0 9d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 10d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Unless required by applicable law or agreed to in writing, software 11d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * See the License for the specific language governing permissions and 14d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * limitations under the License. 15d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 16d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haasepackage android.support.v4.view; 17d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 18d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport android.view.View; 19d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport android.view.animation.Interpolator; 20d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 21d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport java.lang.ref.WeakReference; 22797c82a7055f7ba825169388465617f0db716739Chet Haaseimport java.util.WeakHashMap; 23d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 24d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haasepublic class ViewPropertyAnimatorCompat { 25d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase private static final String TAG = "ViewAnimatorCompat"; 26d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase private WeakReference<View> mView; 27ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Runnable mStartAction = null; 28ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Runnable mEndAction = null; 29ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private int mOldLayerType = -1; 30ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase // HACK ALERT! Choosing this id knowing that the framework does not use it anywhere 31ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase // internally and apps should use ids higher than it 32ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase static final int LISTENER_TAG_ID = 0x7e000000; 33ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 34d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 35d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompat(View view) { 36d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase mView = new WeakReference<View>(view); 37d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 38d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 39d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase interface ViewPropertyAnimatorCompatImpl { 40ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setDuration(ViewPropertyAnimatorCompat vpa, View view, long value); 41ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getDuration(ViewPropertyAnimatorCompat vpa, View view); 42ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setInterpolator(ViewPropertyAnimatorCompat vpa, View view, Interpolator value); 43ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public Interpolator getInterpolator(ViewPropertyAnimatorCompat vpa, View view); 44ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setStartDelay(ViewPropertyAnimatorCompat vpa, View view, long value); 45ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getStartDelay(ViewPropertyAnimatorCompat vpa, View view); 46ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alpha(ViewPropertyAnimatorCompat vpa, View view, float value); 47ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alphaBy(ViewPropertyAnimatorCompat vpa, View view, float value); 48ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotation(ViewPropertyAnimatorCompat vpa, View view, float value); 49ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationBy(ViewPropertyAnimatorCompat vpa, View view, float value); 50ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationX(ViewPropertyAnimatorCompat vpa, View view, float value); 51ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationXBy(ViewPropertyAnimatorCompat vpa, View view, float value); 52ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationY(ViewPropertyAnimatorCompat vpa, View view, float value); 53ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationYBy(ViewPropertyAnimatorCompat vpa, View view, float value); 54ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleX(ViewPropertyAnimatorCompat vpa, View view, float value); 55ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleXBy(ViewPropertyAnimatorCompat vpa, View view, float value); 56ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleY(ViewPropertyAnimatorCompat vpa, View view, float value); 57ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleYBy(ViewPropertyAnimatorCompat vpa, View view, float value); 58ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void cancel(ViewPropertyAnimatorCompat vpa, View view); 59ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void x(ViewPropertyAnimatorCompat vpa, View view, float value); 60ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void xBy(ViewPropertyAnimatorCompat vpa, View view, float value); 61ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void y(ViewPropertyAnimatorCompat vpa, View view, float value); 62ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void yBy(ViewPropertyAnimatorCompat vpa, View view, float value); 63ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationX(ViewPropertyAnimatorCompat vpa, View view, float value); 64ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationXBy(ViewPropertyAnimatorCompat vpa, View view, float value); 65ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationY(ViewPropertyAnimatorCompat vpa, View view, float value); 66ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationYBy(ViewPropertyAnimatorCompat vpa, View view, float value); 67ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void start(ViewPropertyAnimatorCompat vpa, View view); 68ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view); 69ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable); 70ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable); 71ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, 72ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener); 73ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setUpdateListener(ViewPropertyAnimatorCompat vpa, View view, 74ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorUpdateListener listener); 75d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase }; 76d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 77d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class BaseViewPropertyAnimatorCompatImpl implements ViewPropertyAnimatorCompatImpl { 78797c82a7055f7ba825169388465617f0db716739Chet Haase WeakHashMap<View, Runnable> mStarterMap = null; 79d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 80d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 81ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setDuration(ViewPropertyAnimatorCompat vpa, View view, long value) { 82d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 83d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 84d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 85d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 86ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alpha(ViewPropertyAnimatorCompat vpa, View view, float value) { 87d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 88ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 89d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 90d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 91d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 92ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 93d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 94ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 95d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 96d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 97d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 98ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 99d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 100ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 102d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 103d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 104ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 105ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mEndAction = runnable; 106ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 107d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 108d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 109d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 110ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getDuration(ViewPropertyAnimatorCompat vpa, View view) { 111d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 112d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 113d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 114d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 115ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setInterpolator(ViewPropertyAnimatorCompat vpa, View view, Interpolator value) { 116d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 117d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 118d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 119d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 120ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public Interpolator getInterpolator(ViewPropertyAnimatorCompat vpa, View view) { 121d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return null; 122d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 123d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 124d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 125ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setStartDelay(ViewPropertyAnimatorCompat vpa, View view, long value) { 126d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 127d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 128d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 129d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 130ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getStartDelay(ViewPropertyAnimatorCompat vpa, View view) { 131d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 132d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 133d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 134d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 135ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alphaBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 136d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 137ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 138d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 139d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 140d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 141ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotation(ViewPropertyAnimatorCompat vpa, View view, float value) { 142d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 143ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 144d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 145d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 146d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 147ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 148d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 149ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 150d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 151d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 152d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 153ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 154d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 155ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 156d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 157d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 158d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 159ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 160d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 161ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 162d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 163d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 164d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 165ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 166d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 167ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 168d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 169d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 170d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 171ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 172d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 173ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 174d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 175d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 176d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 177ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleX(ViewPropertyAnimatorCompat vpa, View view, float value) { 178d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 179ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 180d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 181d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 182d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 183ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 184d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 185ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 186d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 187d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 188d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 189ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleY(ViewPropertyAnimatorCompat vpa, View view, float value) { 190d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 191ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 192d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 193d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 194d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 195ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 196d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 197ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 198d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 199d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 200d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 201ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void cancel(ViewPropertyAnimatorCompat vpa, View view) { 202d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 203ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 204d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 205d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 206d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 207ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void x(ViewPropertyAnimatorCompat vpa, View view, float value) { 208d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 209ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 210d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 211d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 212d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 213ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void xBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 214d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 215ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 216d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 217d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 218d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 219ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void y(ViewPropertyAnimatorCompat vpa, View view, float value) { 220d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 221ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 222d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 223d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 224d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 225ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void yBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 226d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 227ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 228d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 229d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 230d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 231ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 232d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 233ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 234d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 235d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 236d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 237ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 238d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 239ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 240d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 241d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 242d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 243ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void start(ViewPropertyAnimatorCompat vpa, View view) { 244797c82a7055f7ba825169388465617f0db716739Chet Haase removeStartMessage(view); 245ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase startAnimation(vpa, view); 246d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 247d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 248d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 249ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view) { 250d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 251d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 252d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 253d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 254ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 255ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mStartAction = runnable; 256ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase postStartMessage(vpa, view); 257d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 258d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 259d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 260ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorListener listener) { 261ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase view.setTag(LISTENER_TAG_ID, listener); 26249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 26349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 26449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes @Override 265ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setUpdateListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorUpdateListener listener) { 26649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes // noop 267d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 268797c82a7055f7ba825169388465617f0db716739Chet Haase 269ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private void startAnimation(ViewPropertyAnimatorCompat vpa, View view) { 270ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 271ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 272ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 273ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 274ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 275ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Runnable startAction = vpa.mStartAction; 276ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Runnable endAction = vpa.mEndAction; 277797c82a7055f7ba825169388465617f0db716739Chet Haase if (startAction != null) { 278797c82a7055f7ba825169388465617f0db716739Chet Haase startAction.run(); 279797c82a7055f7ba825169388465617f0db716739Chet Haase } 280797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 281797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationStart(view); 282797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationEnd(view); 283797c82a7055f7ba825169388465617f0db716739Chet Haase } 284797c82a7055f7ba825169388465617f0db716739Chet Haase if (endAction != null) { 285797c82a7055f7ba825169388465617f0db716739Chet Haase endAction.run(); 286797c82a7055f7ba825169388465617f0db716739Chet Haase } 287797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 288797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap.remove(view); 289797c82a7055f7ba825169388465617f0db716739Chet Haase } 290797c82a7055f7ba825169388465617f0db716739Chet Haase } 291797c82a7055f7ba825169388465617f0db716739Chet Haase 292797c82a7055f7ba825169388465617f0db716739Chet Haase class Starter implements Runnable { 293797c82a7055f7ba825169388465617f0db716739Chet Haase WeakReference<View> mViewRef; 294ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompat mVpa; 295797c82a7055f7ba825169388465617f0db716739Chet Haase 296ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private Starter(ViewPropertyAnimatorCompat vpa, View view) { 297797c82a7055f7ba825169388465617f0db716739Chet Haase mViewRef = new WeakReference<View>(view); 298ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa = vpa; 299797c82a7055f7ba825169388465617f0db716739Chet Haase } 300797c82a7055f7ba825169388465617f0db716739Chet Haase 301797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 302797c82a7055f7ba825169388465617f0db716739Chet Haase public void run() { 303ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase startAnimation(mVpa, mViewRef.get()); 304797c82a7055f7ba825169388465617f0db716739Chet Haase } 305797c82a7055f7ba825169388465617f0db716739Chet Haase }; 306797c82a7055f7ba825169388465617f0db716739Chet Haase 307797c82a7055f7ba825169388465617f0db716739Chet Haase private void removeStartMessage(View view) { 308797c82a7055f7ba825169388465617f0db716739Chet Haase Runnable starter = null; 309797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 310797c82a7055f7ba825169388465617f0db716739Chet Haase starter = mStarterMap.get(view); 311797c82a7055f7ba825169388465617f0db716739Chet Haase if (starter != null) { 312797c82a7055f7ba825169388465617f0db716739Chet Haase view.removeCallbacks(starter); 313797c82a7055f7ba825169388465617f0db716739Chet Haase } 314797c82a7055f7ba825169388465617f0db716739Chet Haase } 315797c82a7055f7ba825169388465617f0db716739Chet Haase } 316797c82a7055f7ba825169388465617f0db716739Chet Haase 317ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase private void postStartMessage(ViewPropertyAnimatorCompat vpa, View view) { 318797c82a7055f7ba825169388465617f0db716739Chet Haase Runnable starter = null; 319797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap != null) { 320797c82a7055f7ba825169388465617f0db716739Chet Haase starter = mStarterMap.get(view); 321797c82a7055f7ba825169388465617f0db716739Chet Haase } 322797c82a7055f7ba825169388465617f0db716739Chet Haase if (starter == null) { 323ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase starter = new Starter(vpa, view); 324797c82a7055f7ba825169388465617f0db716739Chet Haase if (mStarterMap == null) { 325797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap = new WeakHashMap<View, Runnable>(); 326797c82a7055f7ba825169388465617f0db716739Chet Haase } 327797c82a7055f7ba825169388465617f0db716739Chet Haase mStarterMap.put(view, starter); 328797c82a7055f7ba825169388465617f0db716739Chet Haase } 329797c82a7055f7ba825169388465617f0db716739Chet Haase view.removeCallbacks(starter); 330797c82a7055f7ba825169388465617f0db716739Chet Haase view.post(starter); 331797c82a7055f7ba825169388465617f0db716739Chet Haase } 332797c82a7055f7ba825169388465617f0db716739Chet Haase 333d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 334d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 335d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class ICSViewPropertyAnimatorCompatImpl extends BaseViewPropertyAnimatorCompatImpl { 336797c82a7055f7ba825169388465617f0db716739Chet Haase WeakHashMap<View, Integer> mLayerMap = null; 337d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 338d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 339ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setDuration(ViewPropertyAnimatorCompat vpa, View view, long value) { 340d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setDuration(view, value); 341d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 342d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 343d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 344ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alpha(ViewPropertyAnimatorCompat vpa, View view, float value) { 345d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.alpha(view, value); 346d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 347d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 348d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 349ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 350d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationX(view, value); 351d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 352d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 353d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 354ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 355d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationY(view, value); 356d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 357d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 358d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 359ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getDuration(ViewPropertyAnimatorCompat vpa, View view) { 360d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return ViewPropertyAnimatorCompatICS.getDuration(view); 361d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 362d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 363d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 364ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setInterpolator(ViewPropertyAnimatorCompat vpa, View view, Interpolator value) { 365d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setInterpolator(view, value); 366d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 367d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 368d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 369ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setStartDelay(ViewPropertyAnimatorCompat vpa, View view, long value) { 370d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setStartDelay(view, value); 371d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 372d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 373d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 374ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public long getStartDelay(ViewPropertyAnimatorCompat vpa, View view) { 375d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return ViewPropertyAnimatorCompatICS.getStartDelay(view); 376d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 377d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 378d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 379ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void alphaBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 380d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.alphaBy(view, value); 381d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 382d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 383d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 384ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotation(ViewPropertyAnimatorCompat vpa, View view, float value) { 385d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotation(view, value); 386d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 387d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 388d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 389ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 390d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationBy(view, value); 391d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 392d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 393d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 394ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationX(ViewPropertyAnimatorCompat vpa, View view, float value) { 395d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationX(view, value); 396d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 397d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 398d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 399ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 400d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationXBy(view, value); 401d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 402d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 403d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 404ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationY(ViewPropertyAnimatorCompat vpa, View view, float value) { 405d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationY(view, value); 406d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 407d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 408d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 409ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void rotationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 410d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationYBy(view, value); 411d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 412d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 413d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 414ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleX(ViewPropertyAnimatorCompat vpa, View view, float value) { 415d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleX(view, value); 416d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 417d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 418d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 419ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 420d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleXBy(view, value); 421d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 422d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 423d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 424ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleY(ViewPropertyAnimatorCompat vpa, View view, float value) { 425d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleY(view, value); 426d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 427d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 428d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 429ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void scaleYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 430d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleYBy(view, value); 431d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 432d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 433d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 434ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void cancel(ViewPropertyAnimatorCompat vpa, View view) { 435d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.cancel(view); 436d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 437d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 438d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 439ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void x(ViewPropertyAnimatorCompat vpa, View view, float value) { 440d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.x(view, value); 441d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 442d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 443d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 444ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void xBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 445d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.xBy(view, value); 446d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 447d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 448d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 449ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void y(ViewPropertyAnimatorCompat vpa, View view, float value) { 450d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.y(view, value); 451d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 452d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 453d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 454ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void yBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 455d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.yBy(view, value); 456d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 457d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 458d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 459ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationXBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 460d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationXBy(view, value); 461d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 462d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 463d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 464ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void translationYBy(ViewPropertyAnimatorCompat vpa, View view, float value) { 465d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationYBy(view, value); 466d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 467d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 468d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 469ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void start(ViewPropertyAnimatorCompat vpa, View view) { 470d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.start(view); 471d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 472d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 473d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 474ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorListener listener) { 475ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase view.setTag(LISTENER_TAG_ID, listener); 476ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 477d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 478d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 479d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 480ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, final Runnable runnable) { 481ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 482ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mEndAction = runnable; 483d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 484d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 485d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 486ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, final Runnable runnable) { 487ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 488ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mStartAction = runnable; 489d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 490d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 491d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 492ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view) { 493ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase vpa.mOldLayerType = ViewCompat.getLayerType(view); 494ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatICS.setListener(view, new MyVpaListener(vpa)); 495797c82a7055f7ba825169388465617f0db716739Chet Haase } 496797c82a7055f7ba825169388465617f0db716739Chet Haase 497ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase static class MyVpaListener implements ViewPropertyAnimatorListener { 498ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 499ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompat mVpa; 500ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 501ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase MyVpaListener(ViewPropertyAnimatorCompat vpa) { 502ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa = vpa; 503ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 504ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 505797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 506797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationStart(View view) { 507ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mOldLayerType >= 0) { 508d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewCompat.setLayerType(view, ViewCompat.LAYER_TYPE_HARDWARE, null); 509d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 510ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mStartAction != null) { 511ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa.mStartAction.run(); 512ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 513ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 514ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 515ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 516ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 517797c82a7055f7ba825169388465617f0db716739Chet Haase } 518797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 519797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationStart(view); 520797c82a7055f7ba825169388465617f0db716739Chet Haase } 521797c82a7055f7ba825169388465617f0db716739Chet Haase } 522ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 523797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 524797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationEnd(View view) { 525ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mOldLayerType >= 0) { 526ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewCompat.setLayerType(view, mVpa.mOldLayerType, null); 527ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa.mOldLayerType = -1; 528ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 529ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (mVpa.mEndAction != null) { 530ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase mVpa.mEndAction.run(); 531ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 532ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 533ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 534ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 535ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 536797c82a7055f7ba825169388465617f0db716739Chet Haase } 537797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 538797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationEnd(view); 539797c82a7055f7ba825169388465617f0db716739Chet Haase } 540797c82a7055f7ba825169388465617f0db716739Chet Haase } 541d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 542797c82a7055f7ba825169388465617f0db716739Chet Haase @Override 543797c82a7055f7ba825169388465617f0db716739Chet Haase public void onAnimationCancel(View view) { 544ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase Object listenerTag = view.getTag(LISTENER_TAG_ID); 545ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorListener listener = null; 546ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase if (listenerTag instanceof ViewPropertyAnimatorListener) { 547ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase listener = (ViewPropertyAnimatorListener) listenerTag; 548ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 549797c82a7055f7ba825169388465617f0db716739Chet Haase if (listener != null) { 550797c82a7055f7ba825169388465617f0db716739Chet Haase listener.onAnimationCancel(view); 551d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 552797c82a7055f7ba825169388465617f0db716739Chet Haase } 553797c82a7055f7ba825169388465617f0db716739Chet Haase }; 554d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 555d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 556d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class JBViewPropertyAnimatorCompatImpl extends ICSViewPropertyAnimatorCompatImpl { 557d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 558d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 559ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorListener listener) { 560ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase ViewPropertyAnimatorCompatJB.setListener(view, listener); 561ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase } 562ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase 563ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase @Override 564ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withStartAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 565d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withStartAction(view, runnable); 566d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 567d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 568d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 569ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withEndAction(ViewPropertyAnimatorCompat vpa, View view, Runnable runnable) { 570d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withEndAction(view, runnable); 571d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 572d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 573d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 574ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void withLayer(ViewPropertyAnimatorCompat vpa, View view) { 575d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withLayer(view); 576d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 577d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 578d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 579d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class JBMr2ViewPropertyAnimatorCompatImpl extends JBViewPropertyAnimatorCompatImpl { 580d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 581d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 582ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public Interpolator getInterpolator(ViewPropertyAnimatorCompat vpa, View view) { 583d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return (Interpolator) ViewPropertyAnimatorCompatJellybeanMr2.getInterpolator(view); 584d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 585d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 586d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 58749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes static class KitKatViewPropertyAnimatorCompatImpl extends JBMr2ViewPropertyAnimatorCompatImpl { 58849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes @Override 589ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase public void setUpdateListener(ViewPropertyAnimatorCompat vpa, View view, ViewPropertyAnimatorUpdateListener listener) { 59049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes ViewPropertyAnimatorCompatKK.setUpdateListener(view, listener); 59149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 59249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 59349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 594d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static final ViewPropertyAnimatorCompatImpl IMPL; 595d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static { 596d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase final int version = android.os.Build.VERSION.SDK_INT; 59749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes if (version >= 19) { 59849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes IMPL = new KitKatViewPropertyAnimatorCompatImpl(); 59949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } else if (version >= 18) { 600d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new JBMr2ViewPropertyAnimatorCompatImpl(); 601d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else if (version >= 16) { 602d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new JBViewPropertyAnimatorCompatImpl(); 603d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else if (version >= 14) { 604d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new ICSViewPropertyAnimatorCompatImpl(); 605d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 606d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new BaseViewPropertyAnimatorCompatImpl(); 607d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 608d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 609d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 610d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 611d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the duration for the underlying animator that animates the requested properties. 612d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default value for ValueAnimator. Calling this method 613d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared value to be used instead. 614d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 615d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 616d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 617d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The length of ensuing property animations, in milliseconds. The value 618d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * cannot be negative. 619d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 620d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 621d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setDuration(long value) { 622d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 623d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 624ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setDuration(this, view, value); 625d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 626d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 627d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 628d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 629d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 630d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>alpha</code> property to be animated to the 631d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 632d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 633d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 634d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 635d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 636d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 637d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 638d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat alpha(float value) { 639d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 640d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 641ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.alpha(this, view, value); 642d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 643d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 644d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 645d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 646d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 647d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>alpha</code> property to be animated by the 648d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 649d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 650d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 651d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 652d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 653d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 654d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 655d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat alphaBy(float value) { 656d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 657d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 658ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.alphaBy(this, view, value); 659d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 660d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 661d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 662d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 663d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 664d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationX</code> property to be animated to the 665d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 666d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 667d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 668d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 669d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 670d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 671d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 672d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationX(float value) { 673d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 674d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 675ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationX(this, view, value); 676d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 677d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 678d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 679d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 680d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 681d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationY</code> property to be animated to the 682d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 683d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 684d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 685d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 686d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 687d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 688d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 689d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationY(float value) { 690d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 691d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 692ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationY(this, view, value); 693d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 694d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 695d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 696d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 697d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 698d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Specifies an action to take place when the next animation ends. The action is only 699d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * run if the animation ends normally; if the ViewPropertyAnimator is canceled during 700d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * that animation, the runnable will not run. 701d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method, along with {@link #withStartAction(Runnable)}, is intended to help facilitate 702d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * choreographing ViewPropertyAnimator animations with other animations or actions 703d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in the application. 704d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 705d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For example, the following code animates a view to x=200 and then back to 0:</p> 706d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <pre> 707d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Runnable endAction = new Runnable() { 708d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * public void run() { 709d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view.animate().x(0); 710d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * } 711d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * }; 712d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view.animate().x(200).withEndAction(endAction); 713d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * </pre> 714d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 715d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will run the action immediately.</p> 716d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 717d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 718d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object and running the action 719d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in that listener's {@link ViewPropertyAnimatorListener#onAnimationEnd(View)} method.</p> 720d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 721d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param runnable The action to run when the next animation ends. 722d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 723d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 724d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withEndAction(Runnable runnable) { 725d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 726d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 727ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withEndAction(this, view, runnable); 728d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 729d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 730d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 731d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 732d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 733d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the current duration of property animations. If the duration was set on this 734d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * object, that value is returned. Otherwise, the default value of the underlying Animator 735d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is returned. 736d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 737d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return 0.</p> 738d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 739d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see #setDuration(long) 740d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The duration of animations, in milliseconds. 741d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 742d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getDuration() { 743d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 744d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 745ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getDuration(this, view); 746d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 747d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 748d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 749d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 750d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 751d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 752d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the interpolator for the underlying animator that animates the requested properties. 753d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default interpolator for ValueAnimator. Calling this method 754d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared object to be used instead. 755d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 756d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 757d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 758d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The TimeInterpolator to be used for ensuing property animations. 759d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 760d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 761d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setInterpolator(Interpolator value) { 762d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 763d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 764ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setInterpolator(this, view, value); 765d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 766d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 767d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 768d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 769d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 770d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the timing interpolator that this animation uses. 771d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 772d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return null.</p> 773d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 774d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The timing interpolator for this animation. 775d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 776d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public Interpolator getInterpolator() { 777d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 778d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 779ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getInterpolator(this, view); 780d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 781d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase else return null; 782d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 783d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 784d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 785d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the startDelay for the underlying animator that animates the requested properties. 786d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default value for ValueAnimator. Calling this method 787d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared value to be used instead. 788d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 789d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 790d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 791d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The delay of ensuing property animations, in milliseconds. The value 792d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * cannot be negative. 793d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 794d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 795d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setStartDelay(long value) { 796d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 797d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 798ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setStartDelay(this, view, value); 799d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 800d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 801d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 802d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 803d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 804d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the current startDelay of property animations. If the startDelay was set on this 805d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * object, that value is returned. Otherwise, the default value of the underlying Animator 806d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is returned. 807d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 808d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return 0.</p> 809d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 810d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see #setStartDelay(long) 811d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The startDelay of animations, in milliseconds. 812d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 813d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getStartDelay() { 814d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 815d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 816ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase return IMPL.getStartDelay(this, view); 817d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 818d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 819d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 820d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 821d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 822d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 823d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotation</code> property to be animated to the 824d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 825d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 826d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 827d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 828d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 829d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 830d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 831d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotation(float value) { 832d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 833d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 834ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotation(this, view, value); 835d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 836d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 837d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 838d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 839d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 840d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotation</code> property to be animated by the 841d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 842d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 843d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 844d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 845d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 846d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 847d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 848d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationBy(float value) { 849d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 850d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 851ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationBy(this, view, value); 852d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 853d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 854d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 855d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 856d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 857d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationX</code> property to be animated to the 858d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 859d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 860d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 861d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 862d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 863d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 864d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 865d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationX(float value) { 866d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 867d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 868ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationX(this, view, value); 869d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 870d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 871d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 872d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 873d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 874d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationX</code> property to be animated by the 875d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 876d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 877d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 878d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 879d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 880d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 881d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 882d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationXBy(float value) { 883d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 884d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 885ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationXBy(this, view, value); 886d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 887d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 888d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 889d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 890d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 891d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationY</code> property to be animated to the 892d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 893d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 894d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 895d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 896d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 897d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 898d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 899d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationY(float value) { 900d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 901d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 902ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationY(this, view, value); 903d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 904d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 905d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 906d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 907d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 908d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationY</code> property to be animated by the 909d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 910d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 911d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 912d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 913d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 914d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 915d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 916d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationYBy(float value) { 917d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 918d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 919ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.rotationYBy(this, view, value); 920d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 921d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 922d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 923d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 924d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 925d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleX</code> property to be animated to the 926d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 927d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 928d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 929d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 930d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 931d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 932d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 933d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleX(float value) { 934d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 935d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 936ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleX(this, view, value); 937d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 938d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 939d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 940d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 941d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 942d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleX</code> property to be animated by the 943d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 944d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 945d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 946d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 947d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 948d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 949d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 950d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleXBy(float value) { 951d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 952d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 953ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleXBy(this, view, value); 954d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 955d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 956d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 957d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 958d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 959d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleY</code> property to be animated to the 960d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 961d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 962d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 963d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 964d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 965d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 966d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 967d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleY(float value) { 968d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 969d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 970ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleY(this, view, value); 971d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 972d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 973d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 974d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 975d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 976d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleY</code> property to be animated by the 977d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 978d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 979d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 980d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 981d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 982d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 983d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 984d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleYBy(float value) { 985d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 986d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 987ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.scaleYBy(this, view, value); 988d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 989d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 990d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 991d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 992d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 993d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Cancels all property animations that are currently running or pending. 994d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 995d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void cancel() { 996d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 997d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 998ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.cancel(this, view); 999d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1000d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1001d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1002d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1003d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>x</code> property to be animated to the 1004d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1005d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1006d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1007d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1008d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 1009d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1010d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1011d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat x(float value) { 1012d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1013d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1014ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.x(this, view, value); 1015d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1016d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1017d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1018d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1019d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1020d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>x</code> property to be animated by the 1021d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1022d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1023d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1024d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1025d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1026d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1027d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1028d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat xBy(float value) { 1029d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1030d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1031ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.xBy(this, view, value); 1032d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1033d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1034d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1035d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1036d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1037d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>y</code> property to be animated to the 1038d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1039d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1040d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1041d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1042d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 1043d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1044d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1045d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat y(float value) { 1046d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1047d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1048ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.y(this, view, value); 1049d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1050d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1051d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1052d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1053d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1054d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>y</code> property to be animated by the 1055d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1056d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1057d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1058d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1059d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1060d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1061d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1062d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat yBy(float value) { 1063d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1064d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1065ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.yBy(this, view, value); 1066d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1067d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1068d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1069d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1070d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1071d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationX</code> property to be animated by the 1072d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1073d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1074d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1075d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1076d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1077d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1078d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1079d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationXBy(float value) { 1080d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1081d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1082ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationXBy(this, view, value); 1083d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1084d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1085d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1086d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1087d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1088d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationY</code> property to be animated by the 1089d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 1090d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1091d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1092d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1093d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 1094d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1095d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1096d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationYBy(float value) { 1097d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1098d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1099ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.translationYBy(this, view, value); 1100d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1102d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1103d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1104d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1105d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Starts the currently pending property animations immediately. Calling <code>start()</code> 1106d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is optional because all animations start automatically at the next opportunity. However, 1107d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * if the animations are needed to start immediately and synchronously (not at the time when 1108d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the next event is processed by the hierarchy, which is when the animations would begin 1109d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * otherwise), then this method can be used. 1110d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1111d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1112d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1113d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void start() { 1114d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1115d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1116ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.start(this, view); 1117d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1118d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1119d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1120d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1121d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * The View associated with this ViewPropertyAnimator will have its 1122d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#setLayerType(View, int, android.graphics.Paint) layer type} set to 1123d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#LAYER_TYPE_HARDWARE} for the duration of the next animation. 1124d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * As stated in the documentation for {@link ViewCompat#LAYER_TYPE_HARDWARE}, 1125d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the actual type of layer used internally depends on the runtime situation of the 1126d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view. If the activity and this view are hardware-accelerated, then the layer will be 1127d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * accelerated as well. If the activity or the view is not accelerated, then the layer will 1128d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * effectively be the same as {@link ViewCompat#LAYER_TYPE_SOFTWARE}. 1129d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1130d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>This state is not persistent, either on the View or on this ViewPropertyAnimator: the 1131d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * layer type of the View will be restored when the animation ends to what it was when this 1132d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * method was called, and this setting on ViewPropertyAnimator is only valid for the next 1133d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * animation. Note that calling this method and then independently setting the layer type of 1134d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the View (by a direct call to 1135d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#setLayerType(View, int, android.graphics.Paint)}) will result in some 1136d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * inconsistency, including having the layer type restored to its pre-withLayer() 1137d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * value when the animation ends.</p> 1138d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1139d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1140d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1141d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 1142d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object, setting a hardware layer in 1143d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the listener's {@link ViewPropertyAnimatorListener#onAnimationStart(View)} method, 1144d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * and then restoring the orignal layer type in the listener's 1145d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewPropertyAnimatorListener#onAnimationEnd(View)} method.</p> 1146d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1147d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see View#setLayerType(int, android.graphics.Paint) 1148d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1149d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1150d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withLayer() { 1151d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1152d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1153ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withLayer(this, view); 1154d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1155d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1156d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1157d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1158d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1159d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Specifies an action to take place when the next animation runs. If there is a 1160d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link #setStartDelay(long) startDelay} set on this ViewPropertyAnimator, then the 1161d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * action will run after that startDelay expires, when the actual animation begins. 1162d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method, along with {@link #withEndAction(Runnable)}, is intended to help facilitate 1163d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * choreographing ViewPropertyAnimator animations with other animations or actions 1164d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in the application. 1165d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1166d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will run the action immediately.</p> 1167d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1168d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 1169d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object and running the action 1170d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in that listener's {@link ViewPropertyAnimatorListener#onAnimationStart(View)} method.</p> 1171d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1172d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param runnable The action to run when the next animation starts. 1173d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1174d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1175d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withStartAction(Runnable runnable) { 1176d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1177d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1178ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.withStartAction(this, view, runnable); 1179d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1180d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1181d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1182d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1183d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1184d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets a listener for events in the underlying Animators that run the property 1185d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * animations. 1186d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1187d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1188d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1189d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param listener The listener to be called with AnimatorListener events. A value of 1190d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <code>null</code> removes any existing listener. 1191d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1192d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1193d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setListener(ViewPropertyAnimatorListener listener) { 1194d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1195d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1196ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setListener(this, view, listener); 1197d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1198d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1199d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 120049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 120149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes /** 120249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * Sets a listener for update events in the underlying Animator that runs 120349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * the property animations. 120449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * 120549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * <p>Prior to API 19, this method will do nothing.</p> 120649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * 120749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @param listener The listener to be called with update events. A value of 120849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * <code>null</code> removes any existing listener. 120949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @return This object, allowing calls to methods in this class to be chained. 121049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes */ 121149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes public ViewPropertyAnimatorCompat setUpdateListener( 121249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes ViewPropertyAnimatorUpdateListener listener) { 121349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes View view; 121449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes if ((view = mView.get()) != null) { 1215ead7065c8e987fefca4d0d850d824fb7d7bce677Chet Haase IMPL.setUpdateListener(this, view, listener); 121649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 121749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes return this; 121849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 1219d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase} 1220