ViewPropertyAnimatorCompat.java revision 49c78900da0d43140fb602431fb93212bd7f6c70
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; 22d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 23d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haasepublic class ViewPropertyAnimatorCompat { 24d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase private static final String TAG = "ViewAnimatorCompat"; 25d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase private WeakReference<View> mView; 26d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 27d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompat(View view) { 28d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase mView = new WeakReference<View>(view); 29d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 30d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 31d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase interface ViewPropertyAnimatorCompatImpl { 32d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setDuration(View view, long value); 33d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getDuration(View view); 34d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setInterpolator(View view, Interpolator value); 35d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public Interpolator getInterpolator(View view); 36d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setStartDelay(View view, long value); 37d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getStartDelay(View view); 38d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void alpha(View view, float value); 39d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void alphaBy(View view, float value); 40d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotation(View view, float value); 41d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationBy(View view, float value); 42d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationX(View view, float value); 43d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationXBy(View view, float value); 44d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationY(View view, float value); 45d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationYBy(View view, float value); 46d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleX(View view, float value); 47d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleXBy(View view, float value); 48d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleY(View view, float value); 49d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleYBy(View view, float value); 50d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void cancel(View view); 51d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void x(View view, float value); 52d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void xBy(View view, float value); 53d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void y(View view, float value); 54d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void yBy(View view, float value); 55d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationX(View view, float value); 56d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationXBy(View view, float value); 57d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationY(View view, float value); 58d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationYBy(View view, float value); 59d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void start(View view); 60d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withLayer(View view); 61d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withStartAction(View view, Runnable runnable); 62d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withEndAction(View view, Runnable runnable); 63d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setListener(View view, ViewPropertyAnimatorListener listener); 6449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes public void setUpdateListener(View view, ViewPropertyAnimatorUpdateListener listener); 65d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase }; 66d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 67d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class BaseViewPropertyAnimatorCompatImpl implements ViewPropertyAnimatorCompatImpl { 6849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes private ViewPropertyAnimatorListener mListener; 69d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 70d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 71d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setDuration(View view, long value) { 72d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 73d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 74d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 75d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 76d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void alpha(View view, float value) { 77d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 78d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 79d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 80d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 81d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationX(View view, float value) { 82d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 83d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 84d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 85d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 86d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationY(View view, float value) { 87d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 88d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 89d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 90d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 91d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withEndAction(View view, Runnable runnable) { 92d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // Other VPA calls are noops pre-ICS; just run the runnable immediately 93d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase runnable.run(); 94d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 95d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 96d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 97d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getDuration(View view) { 98d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 99d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 100d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 102d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setInterpolator(View view, Interpolator value) { 103d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 104d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 105d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 106d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 107d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public Interpolator getInterpolator(View view) { 108d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return null; 109d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 110d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 111d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 112d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setStartDelay(View view, long value) { 113d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 114d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 115d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 116d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 117d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getStartDelay(View view) { 118d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 119d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 120d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 121d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 122d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void alphaBy(View view, float value) { 123d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 124d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 125d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 126d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 127d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotation(View view, float value) { 128d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 129d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 130d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 131d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 132d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationBy(View view, float value) { 133d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 134d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 135d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 136d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 137d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationX(View view, float value) { 138d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 139d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 140d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 141d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 142d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationXBy(View view, float value) { 143d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 144d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 145d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 146d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 147d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationY(View view, float value) { 148d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 149d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 150d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 151d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 152d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationYBy(View view, float value) { 153d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 154d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 155d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 156d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 157d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleX(View view, float value) { 158d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 159d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 160d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 161d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 162d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleXBy(View view, float value) { 163d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 164d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 165d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 166d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 167d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleY(View view, float value) { 168d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 169d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 170d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 171d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 172d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleYBy(View view, float value) { 173d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 174d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 175d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 176d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 177d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void cancel(View view) { 178d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 179d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 180d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 181d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 182d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void x(View view, float value) { 183d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 184d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 185d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 186d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 187d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void xBy(View view, float value) { 188d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 189d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 190d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 191d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 192d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void y(View view, float value) { 193d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 194d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 195d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 196d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 197d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void yBy(View view, float value) { 198d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 199d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 200d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 201d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 202d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationXBy(View view, float value) { 203d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 204d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 205d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 206d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 207d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationYBy(View view, float value) { 208d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 209d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 210d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 211d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 212d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void start(View view) { 21349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes if (mListener != null) { 21449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes // If a listener has been set, start and then end it immediately 21549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes mListener.onAnimationStart(view); 21649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes mListener.onAnimationEnd(view); 21749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 218d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 219d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 220d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 221d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withLayer(View view) { 222d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // noop on versions prior to ICS 223d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 224d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 225d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 226d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withStartAction(View view, Runnable runnable) { 227d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase // Other VPA calls are noops pre-ICS; just run the runnable immediately 228d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase runnable.run(); 229d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 230d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 231d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 232d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setListener(View view, ViewPropertyAnimatorListener listener) { 23349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes mListener = listener; 23449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 23549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 23649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes @Override 23749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes public void setUpdateListener(View view, ViewPropertyAnimatorUpdateListener listener) { 23849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes // noop 239d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 240d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 241d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 242d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class ICSViewPropertyAnimatorCompatImpl extends BaseViewPropertyAnimatorCompatImpl { 243d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 244d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 245d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setDuration(View view, long value) { 246d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setDuration(view, value); 247d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 248d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 249d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 250d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void alpha(View view, float value) { 251d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.alpha(view, value); 252d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 253d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 254d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 255d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationX(View view, float value) { 256d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationX(view, value); 257d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 258d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 259d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 260d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationY(View view, float value) { 261d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationY(view, value); 262d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 263d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 264d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 265d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getDuration(View view) { 266d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return ViewPropertyAnimatorCompatICS.getDuration(view); 267d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 268d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 269d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 270d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setInterpolator(View view, Interpolator value) { 271d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setInterpolator(view, value); 272d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 273d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 274d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 275d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setStartDelay(View view, long value) { 276d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setStartDelay(view, value); 277d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 278d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 279d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 280d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getStartDelay(View view) { 281d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return ViewPropertyAnimatorCompatICS.getStartDelay(view); 282d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 283d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 284d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 285d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void alphaBy(View view, float value) { 286d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.alphaBy(view, value); 287d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 288d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 289d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 290d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotation(View view, float value) { 291d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotation(view, value); 292d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 293d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 294d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 295d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationBy(View view, float value) { 296d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationBy(view, value); 297d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 298d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 299d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 300d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationX(View view, float value) { 301d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationX(view, value); 302d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 303d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 304d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 305d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationXBy(View view, float value) { 306d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationXBy(view, value); 307d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 308d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 309d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 310d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationY(View view, float value) { 311d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationY(view, value); 312d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 313d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 314d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 315d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void rotationYBy(View view, float value) { 316d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.rotationYBy(view, value); 317d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 318d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 319d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 320d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleX(View view, float value) { 321d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleX(view, value); 322d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 323d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 324d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 325d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleXBy(View view, float value) { 326d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleXBy(view, value); 327d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 328d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 329d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 330d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleY(View view, float value) { 331d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleY(view, value); 332d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 333d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 334d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 335d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void scaleYBy(View view, float value) { 336d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.scaleYBy(view, value); 337d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 338d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 339d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 340d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void cancel(View view) { 341d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.cancel(view); 342d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 343d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 344d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 345d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void x(View view, float value) { 346d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.x(view, value); 347d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 348d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 349d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 350d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void xBy(View view, float value) { 351d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.xBy(view, value); 352d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 353d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 354d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 355d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void y(View view, float value) { 356d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.y(view, value); 357d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 358d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 359d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 360d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void yBy(View view, float value) { 361d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.yBy(view, value); 362d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 363d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 364d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 365d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationXBy(View view, float value) { 366d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationXBy(view, value); 367d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 368d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 369d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 370d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void translationYBy(View view, float value) { 371d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.translationYBy(view, value); 372d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 373d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 374d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 375d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void start(View view) { 376d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.start(view); 377d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 378d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 379d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 380d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void setListener(View view, ViewPropertyAnimatorListener listener) { 381d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatICS.setListener(view, listener); 382d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 383d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 384d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 385d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withEndAction(View view, final Runnable runnable) { 386d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase setListener(view, new ViewPropertyAnimatorListener() { 387d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 388d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationStart(View view) { 389d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 390d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 391d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 392d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationEnd(View view) { 393d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase runnable.run(); 394d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase setListener(view, null); 395d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 396d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 397d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 398d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationCancel(View view) { 399d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 400d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase }); 401d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 402d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 403d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 404d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withStartAction(View view, final Runnable runnable) { 405d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase setListener(view, new ViewPropertyAnimatorListener() { 406d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 407d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationStart(View view) { 408d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase runnable.run(); 409d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase setListener(view, null); 410d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 411d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 412d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 413d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationEnd(View view) { 414d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 415d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 416d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 417d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationCancel(View view) { 418d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 419d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase }); 420d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 421d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 422d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 423d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withLayer(View view) { 424d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase final int currentLayerType = ViewCompat.getLayerType(view); 425d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase setListener(view, new ViewPropertyAnimatorListener() { 426d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 427d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationStart(View view) { 428d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewCompat.setLayerType(view, ViewCompat.LAYER_TYPE_HARDWARE, null); 429d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 430d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 431d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationEnd(View view) { 432d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewCompat.setLayerType(view, currentLayerType, null); 433d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase setListener(view, null); 434d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 435d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 436d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 437d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void onAnimationCancel(View view) { 438d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 439d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase }); 440d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 441d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 442d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 443d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class JBViewPropertyAnimatorCompatImpl extends ICSViewPropertyAnimatorCompatImpl { 444d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 445d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 446d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withStartAction(View view, Runnable runnable) { 447d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withStartAction(view, runnable); 448d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 449d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 450d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 451d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withEndAction(View view, Runnable runnable) { 452d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withEndAction(view, runnable); 453d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 454d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 455d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 456d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void withLayer(View view) { 457d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase ViewPropertyAnimatorCompatJB.withLayer(view); 458d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 459d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 460d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 461d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static class JBMr2ViewPropertyAnimatorCompatImpl extends JBViewPropertyAnimatorCompatImpl { 462d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 463d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 464d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public Interpolator getInterpolator(View view) { 465d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return (Interpolator) ViewPropertyAnimatorCompatJellybeanMr2.getInterpolator(view); 466d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 467d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 468d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 46949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes static class KitKatViewPropertyAnimatorCompatImpl extends JBMr2ViewPropertyAnimatorCompatImpl { 47049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes @Override 47149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes public void setUpdateListener(View view, ViewPropertyAnimatorUpdateListener listener) { 47249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes ViewPropertyAnimatorCompatKK.setUpdateListener(view, listener); 47349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 47449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 47549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 476d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static final ViewPropertyAnimatorCompatImpl IMPL; 477d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase static { 478d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase final int version = android.os.Build.VERSION.SDK_INT; 47949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes if (version >= 19) { 48049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes IMPL = new KitKatViewPropertyAnimatorCompatImpl(); 48149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } else if (version >= 18) { 482d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new JBMr2ViewPropertyAnimatorCompatImpl(); 483d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else if (version >= 16) { 484d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new JBViewPropertyAnimatorCompatImpl(); 485d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else if (version >= 14) { 486d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new ICSViewPropertyAnimatorCompatImpl(); 487d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 488d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL = new BaseViewPropertyAnimatorCompatImpl(); 489d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 490d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 491d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 492d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 493d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the duration for the underlying animator that animates the requested properties. 494d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default value for ValueAnimator. Calling this method 495d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared value to be used instead. 496d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 497d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 498d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 499d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The length of ensuing property animations, in milliseconds. The value 500d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * cannot be negative. 501d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 502d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 503d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setDuration(long value) { 504d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 505d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 506d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.setDuration(view, value); 507d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 508d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 509d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 510d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 511d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 512d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>alpha</code> property to be animated to the 513d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 514d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 515d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 516d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 517d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 518d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 519d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 520d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat alpha(float value) { 521d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 522d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 523d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.alpha(view, value); 524d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 525d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 526d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 527d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 528d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 529d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>alpha</code> property to be animated by the 530d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 531d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 532d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 533d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 534d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 535d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 536d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 537d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat alphaBy(float value) { 538d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 539d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 540d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.alphaBy(view, value); 541d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 542d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 543d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 544d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 545d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 546d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationX</code> property to be animated to the 547d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 548d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 549d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 550d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 551d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 552d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 553d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 554d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationX(float value) { 555d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 556d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 557d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.translationX(view, value); 558d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 559d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 560d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 561d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 562d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 563d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationY</code> property to be animated to the 564d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 565d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 566d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 567d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 568d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 569d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 570d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 571d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationY(float value) { 572d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 573d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 574d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.translationY(view, value); 575d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 576d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 577d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 578d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 579d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 580d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Specifies an action to take place when the next animation ends. The action is only 581d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * run if the animation ends normally; if the ViewPropertyAnimator is canceled during 582d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * that animation, the runnable will not run. 583d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method, along with {@link #withStartAction(Runnable)}, is intended to help facilitate 584d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * choreographing ViewPropertyAnimator animations with other animations or actions 585d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in the application. 586d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 587d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For example, the following code animates a view to x=200 and then back to 0:</p> 588d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <pre> 589d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Runnable endAction = new Runnable() { 590d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * public void run() { 591d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view.animate().x(0); 592d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * } 593d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * }; 594d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view.animate().x(200).withEndAction(endAction); 595d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * </pre> 596d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 597d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will run the action immediately.</p> 598d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 599d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 600d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object and running the action 601d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in that listener's {@link ViewPropertyAnimatorListener#onAnimationEnd(View)} method.</p> 602d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 603d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param runnable The action to run when the next animation ends. 604d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 605d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 606d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withEndAction(Runnable runnable) { 607d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 608d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 609d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.withEndAction(view, runnable); 610d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 611d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 612d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 613d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 614d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 615d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the current duration of property animations. If the duration was set on this 616d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * object, that value is returned. Otherwise, the default value of the underlying Animator 617d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is returned. 618d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 619d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return 0.</p> 620d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 621d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see #setDuration(long) 622d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The duration of animations, in milliseconds. 623d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 624d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getDuration() { 625d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 626d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 627d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return IMPL.getDuration(view); 628d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 629d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 630d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 631d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 632d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 633d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 634d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the interpolator for the underlying animator that animates the requested properties. 635d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default interpolator for ValueAnimator. Calling this method 636d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared object to be used instead. 637d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 638d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 639d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 640d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The TimeInterpolator to be used for ensuing property animations. 641d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 642d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 643d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setInterpolator(Interpolator value) { 644d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 645d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 646d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.setInterpolator(view, value); 647d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 648d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 649d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 650d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 651d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 652d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the timing interpolator that this animation uses. 653d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 654d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return null.</p> 655d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 656d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The timing interpolator for this animation. 657d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 658d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public Interpolator getInterpolator() { 659d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 660d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 661d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return IMPL.getInterpolator(view); 662d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 663d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase else return null; 664d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 665d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 666d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 667d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets the startDelay for the underlying animator that animates the requested properties. 668d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * By default, the animator uses the default value for ValueAnimator. Calling this method 669d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * will cause the declared value to be used instead. 670d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 671d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 672d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 673d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The delay of ensuing property animations, in milliseconds. The value 674d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * cannot be negative. 675d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 676d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 677d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setStartDelay(long value) { 678d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 679d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 680d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.setStartDelay(view, value); 681d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 682d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 683d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 684d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 685d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 686d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Returns the current startDelay of property animations. If the startDelay was set on this 687d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * object, that value is returned. Otherwise, the default value of the underlying Animator 688d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is returned. 689d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 690d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will return 0.</p> 691d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 692d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see #setStartDelay(long) 693d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return The startDelay of animations, in milliseconds. 694d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 695d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public long getStartDelay() { 696d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 697d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 698d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return IMPL.getStartDelay(view); 699d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } else { 700d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return 0; 701d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 702d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 703d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 704d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 705d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotation</code> property to be animated to the 706d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 707d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 708d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 709d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 710d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 711d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 712d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 713d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotation(float value) { 714d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 715d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 716d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.rotation(view, value); 717d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 718d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 719d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 720d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 721d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 722d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotation</code> property to be animated by the 723d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 724d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 725d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 726d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 727d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 728d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 729d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 730d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationBy(float value) { 731d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 732d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 733d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.rotationBy(view, value); 734d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 735d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 736d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 737d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 738d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 739d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationX</code> property to be animated to the 740d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 741d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 742d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 743d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 744d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 745d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 746d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 747d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationX(float value) { 748d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 749d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 750d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.rotationX(view, value); 751d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 752d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 753d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 754d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 755d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 756d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationX</code> property to be animated by the 757d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 758d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 759d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 760d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 761d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 762d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 763d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 764d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationXBy(float value) { 765d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 766d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 767d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.rotationXBy(view, value); 768d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 769d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 770d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 771d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 772d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 773d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationY</code> property to be animated to the 774d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 775d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 776d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 777d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 778d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 779d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 780d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 781d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationY(float value) { 782d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 783d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 784d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.rotationY(view, value); 785d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 786d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 787d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 788d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 789d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 790d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>rotationY</code> property to be animated by the 791d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 792d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 793d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 794d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 795d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 796d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 797d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 798d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat rotationYBy(float value) { 799d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 800d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 801d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.rotationYBy(view, value); 802d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 803d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 804d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 805d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 806d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 807d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleX</code> property to be animated to the 808d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 809d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 810d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 811d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 812d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 813d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 814d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 815d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleX(float value) { 816d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 817d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 818d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.scaleX(view, value); 819d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 820d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 821d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 822d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 823d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 824d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleX</code> property to be animated by the 825d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 826d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 827d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 828d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 829d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 830d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 831d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 832d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleXBy(float value) { 833d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 834d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 835d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.scaleXBy(view, value); 836d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 837d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 838d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 839d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 840d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 841d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleY</code> property to be animated to the 842d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 843d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 844d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 845d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 846d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 847d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 848d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 849d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleY(float value) { 850d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 851d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 852d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.scaleY(view, value); 853d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 854d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 855d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 856d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 857d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 858d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>scaleY</code> property to be animated by the 859d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 860d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 861d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 862d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 863d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 864d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 865d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 866d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat scaleYBy(float value) { 867d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 868d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 869d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.scaleYBy(view, value); 870d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 871d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 872d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 873d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 874d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 875d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Cancels all property animations that are currently running or pending. 876d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 877d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void cancel() { 878d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 879d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 880d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.cancel(view); 881d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 882d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 883d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 884d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 885d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>x</code> property to be animated to the 886d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 887d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 888d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 889d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 890d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 891d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 892d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 893d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat x(float value) { 894d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 895d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 896d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.x(view, value); 897d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 898d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 899d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 900d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 901d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 902d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>x</code> property to be animated by the 903d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 904d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 905d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 906d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 907d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 908d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 909d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 910d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat xBy(float value) { 911d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 912d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 913d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.xBy(view, value); 914d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 915d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 916d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 917d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 918d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 919d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>y</code> property to be animated to the 920d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 921d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 922d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 923d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 924d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The value to be animated to. 925d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 926d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 927d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat y(float value) { 928d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 929d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 930d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.y(view, value); 931d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 932d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 933d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 934d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 935d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 936d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>y</code> property to be animated by the 937d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 938d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 939d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 940d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 941d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 942d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 943d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 944d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat yBy(float value) { 945d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 946d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 947d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.yBy(view, value); 948d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 949d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 950d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 951d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 952d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 953d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationX</code> property to be animated by the 954d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 955d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 956d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 957d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 958d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 959d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 960d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 961d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationXBy(float value) { 962d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 963d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 964d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.translationXBy(view, value); 965d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 966d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 967d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 968d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 969d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 970d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method will cause the View's <code>translationY</code> property to be animated by the 971d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * specified value. Animations already running on the property will be canceled. 972d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 973d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 974d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 975d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param value The amount to be animated by, as an offset from the current value. 976d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 977d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 978d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat translationYBy(float value) { 979d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 980d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 981d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.translationYBy(view, value); 982d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 983d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 984d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 985d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 986d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 987d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Starts the currently pending property animations immediately. Calling <code>start()</code> 988d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * is optional because all animations start automatically at the next opportunity. However, 989d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * if the animations are needed to start immediately and synchronously (not at the time when 990d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the next event is processed by the hierarchy, which is when the animations would begin 991d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * otherwise), then this method can be used. 992d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 993d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 994d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 995d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public void start() { 996d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 997d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 998d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.start(view); 999d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1000d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1001d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1002d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1003d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * The View associated with this ViewPropertyAnimator will have its 1004d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#setLayerType(View, int, android.graphics.Paint) layer type} set to 1005d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#LAYER_TYPE_HARDWARE} for the duration of the next animation. 1006d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * As stated in the documentation for {@link ViewCompat#LAYER_TYPE_HARDWARE}, 1007d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the actual type of layer used internally depends on the runtime situation of the 1008d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * view. If the activity and this view are hardware-accelerated, then the layer will be 1009d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * accelerated as well. If the activity or the view is not accelerated, then the layer will 1010d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * effectively be the same as {@link ViewCompat#LAYER_TYPE_SOFTWARE}. 1011d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1012d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>This state is not persistent, either on the View or on this ViewPropertyAnimator: the 1013d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * layer type of the View will be restored when the animation ends to what it was when this 1014d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * method was called, and this setting on ViewPropertyAnimator is only valid for the next 1015d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * animation. Note that calling this method and then independently setting the layer type of 1016d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the View (by a direct call to 1017d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewCompat#setLayerType(View, int, android.graphics.Paint)}) will result in some 1018d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * inconsistency, including having the layer type restored to its pre-withLayer() 1019d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * value when the animation ends.</p> 1020d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1021d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1022d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1023d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 1024d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object, setting a hardware layer in 1025d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * the listener's {@link ViewPropertyAnimatorListener#onAnimationStart(View)} method, 1026d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * and then restoring the orignal layer type in the listener's 1027d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link ViewPropertyAnimatorListener#onAnimationEnd(View)} method.</p> 1028d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1029d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @see View#setLayerType(int, android.graphics.Paint) 1030d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1031d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1032d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withLayer() { 1033d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1034d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1035d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.withLayer(view); 1036d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1037d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1038d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1039d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1040d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1041d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Specifies an action to take place when the next animation runs. If there is a 1042d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * {@link #setStartDelay(long) startDelay} set on this ViewPropertyAnimator, then the 1043d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * action will run after that startDelay expires, when the actual animation begins. 1044d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * This method, along with {@link #withEndAction(Runnable)}, is intended to help facilitate 1045d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * choreographing ViewPropertyAnimator animations with other animations or actions 1046d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in the application. 1047d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1048d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will run the action immediately.</p> 1049d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1050d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>For API 14 and 15, this method will run by setting 1051d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * a listener on the ViewPropertyAnimatorCompat object and running the action 1052d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * in that listener's {@link ViewPropertyAnimatorListener#onAnimationStart(View)} method.</p> 1053d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1054d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param runnable The action to run when the next animation starts. 1055d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1056d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1057d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat withStartAction(Runnable runnable) { 1058d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1059d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1060d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.withStartAction(view, runnable); 1061d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1062d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1063d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1064d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 1065d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase /** 1066d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Sets a listener for events in the underlying Animators that run the property 1067d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * animations. 1068d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1069d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <p>Prior to API 14, this method will do nothing.</p> 1070d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 1071d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @param listener The listener to be called with AnimatorListener events. A value of 1072d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * <code>null</code> removes any existing listener. 1073d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * @return This object, allowing calls to methods in this class to be chained. 1074d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 1075d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase public ViewPropertyAnimatorCompat setListener(ViewPropertyAnimatorListener listener) { 1076d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase View view; 1077d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase if ((view = mView.get()) != null) { 1078d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase IMPL.setListener(view, listener); 1079d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 1080d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase return this; 1081d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 108249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes 108349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes /** 108449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * Sets a listener for update events in the underlying Animator that runs 108549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * the property animations. 108649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * 108749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * <p>Prior to API 19, this method will do nothing.</p> 108849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * 108949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @param listener The listener to be called with update events. A value of 109049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * <code>null</code> removes any existing listener. 109149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @return This object, allowing calls to methods in this class to be chained. 109249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes */ 109349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes public ViewPropertyAnimatorCompat setUpdateListener( 109449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes ViewPropertyAnimatorUpdateListener listener) { 109549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes View view; 109649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes if ((view = mView.get()) != null) { 109749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes IMPL.setUpdateListener(view, listener); 109849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 109949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes return this; 110049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes } 1101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase} 1102