1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.core.widget; 18 19 import android.content.Context; 20 import android.view.animation.Interpolator; 21 import android.widget.OverScroller; 22 23 /** 24 * Provides access to new {@link android.widget.Scroller Scroller} APIs when available. 25 * 26 * <p>This class provides a platform version-independent mechanism for obeying the 27 * current device's preferred scroll physics and fling behavior. It offers a subset of 28 * the APIs from Scroller or OverScroller.</p> 29 * 30 * @deprecated Use {@link OverScroller} directly. 31 */ 32 @Deprecated 33 public final class ScrollerCompat { 34 OverScroller mScroller; 35 36 /** 37 * @deprecated Use {@link OverScroller} constructor directly. 38 */ 39 @Deprecated create(Context context)40 public static ScrollerCompat create(Context context) { 41 return create(context, null); 42 } 43 44 /** 45 * @deprecated Use {@link OverScroller} constructor directly. 46 */ 47 @Deprecated create(Context context, Interpolator interpolator)48 public static ScrollerCompat create(Context context, Interpolator interpolator) { 49 return new ScrollerCompat(context, interpolator); 50 } 51 52 /** 53 * Package protected constructor that allows to specify if API version is newer than ICS. 54 * It is useful for unit testing. 55 */ ScrollerCompat(Context context, Interpolator interpolator)56 ScrollerCompat(Context context, Interpolator interpolator) { 57 mScroller = interpolator != null ? 58 new OverScroller(context, interpolator) : new OverScroller(context); 59 } 60 61 /** 62 * Returns whether the scroller has finished scrolling. 63 * 64 * @return True if the scroller has finished scrolling, false otherwise. 65 * 66 * @deprecated Use {@link OverScroller#isFinished()} directly. 67 */ 68 @Deprecated isFinished()69 public boolean isFinished() { 70 return mScroller.isFinished(); 71 } 72 73 /** 74 * Returns the current X offset in the scroll. 75 * 76 * @return The new X offset as an absolute distance from the origin. 77 * 78 * @deprecated Use {@link OverScroller#getCurrX()} directly. 79 */ 80 @Deprecated getCurrX()81 public int getCurrX() { 82 return mScroller.getCurrX(); 83 } 84 85 /** 86 * Returns the current Y offset in the scroll. 87 * 88 * @return The new Y offset as an absolute distance from the origin. 89 * 90 * @deprecated Use {@link OverScroller#getCurrY()} directly. 91 */ 92 @Deprecated getCurrY()93 public int getCurrY() { 94 return mScroller.getCurrY(); 95 } 96 97 /** 98 * @return The final X position for the scroll in progress, if known. 99 * 100 * @deprecated Use {@link OverScroller#getFinalX()} directly. 101 */ 102 @Deprecated getFinalX()103 public int getFinalX() { 104 return mScroller.getFinalX(); 105 } 106 107 /** 108 * @return The final Y position for the scroll in progress, if known. 109 * 110 * @deprecated Use {@link OverScroller#getFinalY()} directly. 111 */ 112 @Deprecated getFinalY()113 public int getFinalY() { 114 return mScroller.getFinalY(); 115 } 116 117 /** 118 * Returns the current velocity on platform versions that support it. 119 * 120 * <p> This method should only be used as input for nonessential visual effects such as 121 * {@link EdgeEffectCompat}.</p> 122 * 123 * @return The original velocity less the deceleration. Result may be 124 * negative. 125 * 126 * @deprecated Use {@link OverScroller#getCurrVelocity()} directly. 127 */ 128 @Deprecated getCurrVelocity()129 public float getCurrVelocity() { 130 return mScroller.getCurrVelocity(); 131 } 132 133 /** 134 * Call this when you want to know the new location. If it returns true, 135 * the animation is not yet finished. loc will be altered to provide the 136 * new location. 137 * 138 * @deprecated Use {@link OverScroller#computeScrollOffset()} directly. 139 */ 140 @Deprecated computeScrollOffset()141 public boolean computeScrollOffset() { 142 return mScroller.computeScrollOffset(); 143 } 144 145 /** 146 * Start scrolling by providing a starting point and the distance to travel. 147 * The scroll will use the default value of 250 milliseconds for the 148 * duration. 149 * 150 * @param startX Starting horizontal scroll offset in pixels. Positive 151 * numbers will scroll the content to the left. 152 * @param startY Starting vertical scroll offset in pixels. Positive numbers 153 * will scroll the content up. 154 * @param dx Horizontal distance to travel. Positive numbers will scroll the 155 * content to the left. 156 * @param dy Vertical distance to travel. Positive numbers will scroll the 157 * content up. 158 * 159 * @deprecated Use {@link OverScroller#getCurrX()} directly. 160 */ 161 @Deprecated startScroll(int startX, int startY, int dx, int dy)162 public void startScroll(int startX, int startY, int dx, int dy) { 163 mScroller.startScroll(startX, startY, dx, dy); 164 } 165 166 /** 167 * Start scrolling by providing a starting point and the distance to travel. 168 * 169 * @param startX Starting horizontal scroll offset in pixels. Positive 170 * numbers will scroll the content to the left. 171 * @param startY Starting vertical scroll offset in pixels. Positive numbers 172 * will scroll the content up. 173 * @param dx Horizontal distance to travel. Positive numbers will scroll the 174 * content to the left. 175 * @param dy Vertical distance to travel. Positive numbers will scroll the 176 * content up. 177 * @param duration Duration of the scroll in milliseconds. 178 * 179 * @deprecated Use {@link OverScroller#startScroll(int, int, int, int, int)} directly. 180 */ 181 @Deprecated startScroll(int startX, int startY, int dx, int dy, int duration)182 public void startScroll(int startX, int startY, int dx, int dy, int duration) { 183 mScroller.startScroll(startX, startY, dx, dy, duration); 184 } 185 186 /** 187 * Start scrolling based on a fling gesture. The distance travelled will 188 * depend on the initial velocity of the fling. 189 * 190 * @param startX Starting point of the scroll (X) 191 * @param startY Starting point of the scroll (Y) 192 * @param velocityX Initial velocity of the fling (X) measured in pixels per 193 * second. 194 * @param velocityY Initial velocity of the fling (Y) measured in pixels per 195 * second 196 * @param minX Minimum X value. The scroller will not scroll past this 197 * point. 198 * @param maxX Maximum X value. The scroller will not scroll past this 199 * point. 200 * @param minY Minimum Y value. The scroller will not scroll past this 201 * point. 202 * @param maxY Maximum Y value. The scroller will not scroll past this 203 * point. 204 * 205 * @deprecated Use {@link OverScroller#fling(int, int, int, int, int, int, int, int)} directly. 206 */ 207 @Deprecated fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)208 public void fling(int startX, int startY, int velocityX, int velocityY, 209 int minX, int maxX, int minY, int maxY) { 210 mScroller.fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY); 211 } 212 213 /** 214 * Start scrolling based on a fling gesture. The distance travelled will 215 * depend on the initial velocity of the fling. 216 * 217 * @param startX Starting point of the scroll (X) 218 * @param startY Starting point of the scroll (Y) 219 * @param velocityX Initial velocity of the fling (X) measured in pixels per 220 * second. 221 * @param velocityY Initial velocity of the fling (Y) measured in pixels per 222 * second 223 * @param minX Minimum X value. The scroller will not scroll past this 224 * point. 225 * @param maxX Maximum X value. The scroller will not scroll past this 226 * point. 227 * @param minY Minimum Y value. The scroller will not scroll past this 228 * point. 229 * @param maxY Maximum Y value. The scroller will not scroll past this 230 * point. 231 * @param overX Overfling range. If > 0, horizontal overfling in either 232 * direction will be possible. 233 * @param overY Overfling range. If > 0, vertical overfling in either 234 * direction will be possible. 235 * 236 * @deprecated Use {@link OverScroller#fling(int, int, int, int, int, int, int, int, int, int)} 237 * directly. 238 */ 239 @Deprecated fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY, int overX, int overY)240 public void fling(int startX, int startY, int velocityX, int velocityY, 241 int minX, int maxX, int minY, int maxY, int overX, int overY) { 242 mScroller.fling(startX, startY, velocityX, velocityY, 243 minX, maxX, minY, maxY, overX, overY); 244 } 245 246 /** 247 * Call this when you want to 'spring back' into a valid coordinate range. 248 * 249 * @param startX Starting X coordinate 250 * @param startY Starting Y coordinate 251 * @param minX Minimum valid X value 252 * @param maxX Maximum valid X value 253 * @param minY Minimum valid Y value 254 * @param maxY Maximum valid Y value 255 * @return true if a springback was initiated, false if startX and startY were 256 * already within the valid range. 257 * 258 * @deprecated Use {@link OverScroller#springBack(int, int, int, int, int, int)} directly. 259 */ 260 @Deprecated springBack(int startX, int startY, int minX, int maxX, int minY, int maxY)261 public boolean springBack(int startX, int startY, int minX, int maxX, int minY, int maxY) { 262 return mScroller.springBack(startX, startY, minX, maxX, minY, maxY); 263 } 264 265 /** 266 * Stops the animation. Aborting the animation causes the scroller to move to the final x and y 267 * position. 268 * 269 * @deprecated Use {@link OverScroller#abortAnimation()} directly. 270 */ 271 @Deprecated abortAnimation()272 public void abortAnimation() { 273 mScroller.abortAnimation(); 274 } 275 276 277 /** 278 * Notify the scroller that we've reached a horizontal boundary. 279 * Normally the information to handle this will already be known 280 * when the animation is started, such as in a call to one of the 281 * fling functions. However there are cases where this cannot be known 282 * in advance. This function will transition the current motion and 283 * animate from startX to finalX as appropriate. 284 * 285 * @param startX Starting/current X position 286 * @param finalX Desired final X position 287 * @param overX Magnitude of overscroll allowed. This should be the maximum 288 * desired distance from finalX. Absolute value - must be positive. 289 * 290 * @deprecated Use {@link OverScroller#notifyHorizontalEdgeReached(int, int, int)} directly. 291 */ 292 @Deprecated notifyHorizontalEdgeReached(int startX, int finalX, int overX)293 public void notifyHorizontalEdgeReached(int startX, int finalX, int overX) { 294 mScroller.notifyHorizontalEdgeReached(startX, finalX, overX); 295 } 296 297 /** 298 * Notify the scroller that we've reached a vertical boundary. 299 * Normally the information to handle this will already be known 300 * when the animation is started, such as in a call to one of the 301 * fling functions. However there are cases where this cannot be known 302 * in advance. This function will animate a parabolic motion from 303 * startY to finalY. 304 * 305 * @param startY Starting/current Y position 306 * @param finalY Desired final Y position 307 * @param overY Magnitude of overscroll allowed. This should be the maximum 308 * desired distance from finalY. Absolute value - must be positive. 309 * 310 * @deprecated Use {@link OverScroller#notifyVerticalEdgeReached(int, int, int)} directly. 311 */ 312 @Deprecated notifyVerticalEdgeReached(int startY, int finalY, int overY)313 public void notifyVerticalEdgeReached(int startY, int finalY, int overY) { 314 mScroller.notifyVerticalEdgeReached(startY, finalY, overY); 315 } 316 317 /** 318 * Returns whether the current Scroller is currently returning to a valid position. 319 * Valid bounds were provided by the 320 * {@link #fling(int, int, int, int, int, int, int, int, int, int)} method. 321 * 322 * One should check this value before calling 323 * {@link #startScroll(int, int, int, int)} as the interpolation currently in progress 324 * to restore a valid position will then be stopped. The caller has to take into account 325 * the fact that the started scroll will start from an overscrolled position. 326 * 327 * @return true when the current position is overscrolled and in the process of 328 * interpolating back to a valid value. 329 * 330 * @deprecated Use {@link OverScroller#isOverScrolled()} directly. 331 */ 332 @Deprecated isOverScrolled()333 public boolean isOverScrolled() { 334 return mScroller.isOverScrolled(); 335 } 336 } 337