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