17149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas/* 27149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Copyright (C) 2017 The Android Open Source Project 37149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 47149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Licensed under the Apache License, Version 2.0 (the "License"); 57149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * you may not use this file except in compliance with the License. 67149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * You may obtain a copy of the License at 77149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 87149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * http://www.apache.org/licenses/LICENSE-2.0 97149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 107149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Unless required by applicable law or agreed to in writing, software 117149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * distributed under the License is distributed on an "AS IS" BASIS, 127149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * See the License for the specific language governing permissions and 147149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * limitations under the License. 157149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 167149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 177149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikaspackage com.android.internal.widget; 187149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 197149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikasimport android.annotation.NonNull; 207149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikasimport android.annotation.Nullable; 217149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikasimport android.util.Log; 227149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikasimport android.view.View; 237149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 247149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikasimport com.android.internal.widget.RecyclerView.Adapter; 257149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikasimport com.android.internal.widget.RecyclerView.ViewHolder; 267149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 277149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas/** 287149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * A wrapper class for ItemAnimator that records View bounds and decides whether it should run 297149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * move, change, add or remove animations. This class also replicates the original ItemAnimator 307149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * API. 317149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * <p> 327149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * It uses {@link ItemHolderInfo} to track the bounds information of the Views. If you would like 337149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * to 347149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * extend this class, you can override {@link #obtainHolderInfo()} method to provide your own info 357149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * class that extends {@link ItemHolderInfo}. 367149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 377149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikaspublic abstract class SimpleItemAnimator extends RecyclerView.ItemAnimator { 387149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 397149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas private static final boolean DEBUG = false; 407149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 417149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas private static final String TAG = "SimpleItemAnimator"; 427149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 437149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas boolean mSupportsChangeAnimations = true; 447149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 457149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 467149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Returns whether this ItemAnimator supports animations of change events. 477149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 487149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @return true if change animations are supported, false otherwise 497149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 507149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @SuppressWarnings("unused") 517149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public boolean getSupportsChangeAnimations() { 527149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return mSupportsChangeAnimations; 537149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 547149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 557149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 567149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Sets whether this ItemAnimator supports animations of item change events. 577149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * If you set this property to false, actions on the data set which change the 587149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * contents of items will not be animated. What those animations do is left 597149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * up to the discretion of the ItemAnimator subclass, in its 607149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateChange(ViewHolder, ViewHolder, int, int, int, int)} implementation. 617149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The value of this property is true by default. 627149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 637149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param supportsChangeAnimations true if change animations are supported by 647149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this ItemAnimator, false otherwise. If the property is false, 657149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * the ItemAnimator 667149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * will not receive a call to 677149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateChange(ViewHolder, ViewHolder, int, int, int, 687149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * int)} when changes occur. 697149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @see Adapter#notifyItemChanged(int) 707149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @see Adapter#notifyItemRangeChanged(int, int) 717149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 727149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void setSupportsChangeAnimations(boolean supportsChangeAnimations) { 737149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas mSupportsChangeAnimations = supportsChangeAnimations; 747149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 757149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 767149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 777149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@inheritDoc} 787149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 797149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @return True if change animations are not supported or the ViewHolder is invalid, 807149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * false otherwise. 817149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 827149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @see #setSupportsChangeAnimations(boolean) 837149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 847149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @Override 857149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public boolean canReuseUpdatedViewHolder(@NonNull RecyclerView.ViewHolder viewHolder) { 867149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return !mSupportsChangeAnimations || viewHolder.isInvalid(); 877149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 887149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 897149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @Override 907149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public boolean animateDisappearance(@NonNull ViewHolder viewHolder, 917149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @NonNull ItemHolderInfo preLayoutInfo, @Nullable ItemHolderInfo postLayoutInfo) { 927149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas int oldLeft = preLayoutInfo.left; 937149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas int oldTop = preLayoutInfo.top; 947149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas View disappearingItemView = viewHolder.itemView; 957149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas int newLeft = postLayoutInfo == null ? disappearingItemView.getLeft() : postLayoutInfo.left; 967149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas int newTop = postLayoutInfo == null ? disappearingItemView.getTop() : postLayoutInfo.top; 977149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (!viewHolder.isRemoved() && (oldLeft != newLeft || oldTop != newTop)) { 987149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas disappearingItemView.layout(newLeft, newTop, 997149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas newLeft + disappearingItemView.getWidth(), 1007149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas newTop + disappearingItemView.getHeight()); 1017149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (DEBUG) { 1027149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas Log.d(TAG, "DISAPPEARING: " + viewHolder + " with view " + disappearingItemView); 1037149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1047149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return animateMove(viewHolder, oldLeft, oldTop, newLeft, newTop); 1057149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } else { 1067149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (DEBUG) { 1077149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas Log.d(TAG, "REMOVED: " + viewHolder + " with view " + disappearingItemView); 1087149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1097149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return animateRemove(viewHolder); 1107149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1117149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1127149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 1137149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @Override 1147149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public boolean animateAppearance(@NonNull ViewHolder viewHolder, 1157149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @Nullable ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) { 1167149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (preLayoutInfo != null && (preLayoutInfo.left != postLayoutInfo.left 1177149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas || preLayoutInfo.top != postLayoutInfo.top)) { 1187149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas // slide items in if before/after locations differ 1197149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (DEBUG) { 1207149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas Log.d(TAG, "APPEARING: " + viewHolder + " with view " + viewHolder); 1217149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1227149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return animateMove(viewHolder, preLayoutInfo.left, preLayoutInfo.top, 1237149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas postLayoutInfo.left, postLayoutInfo.top); 1247149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } else { 1257149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (DEBUG) { 1267149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas Log.d(TAG, "ADDED: " + viewHolder + " with view " + viewHolder); 1277149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1287149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return animateAdd(viewHolder); 1297149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1307149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1317149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 1327149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @Override 1337149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public boolean animatePersistence(@NonNull ViewHolder viewHolder, 1347149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @NonNull ItemHolderInfo preInfo, @NonNull ItemHolderInfo postInfo) { 1357149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (preInfo.left != postInfo.left || preInfo.top != postInfo.top) { 1367149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (DEBUG) { 1377149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas Log.d(TAG, "PERSISTENT: " + viewHolder 1387149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas + " with view " + viewHolder.itemView); 1397149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1407149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return animateMove(viewHolder, 1417149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas preInfo.left, preInfo.top, postInfo.left, postInfo.top); 1427149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1437149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas dispatchMoveFinished(viewHolder); 1447149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return false; 1457149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1467149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 1477149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @Override 1487149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public boolean animateChange(@NonNull ViewHolder oldHolder, @NonNull ViewHolder newHolder, 1497149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @NonNull ItemHolderInfo preInfo, @NonNull ItemHolderInfo postInfo) { 1507149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (DEBUG) { 1517149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas Log.d(TAG, "CHANGED: " + oldHolder + " with view " + oldHolder.itemView); 1527149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1537149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas final int fromLeft = preInfo.left; 1547149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas final int fromTop = preInfo.top; 1557149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas final int toLeft, toTop; 1567149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas if (newHolder.shouldIgnore()) { 1577149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas toLeft = preInfo.left; 1587149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas toTop = preInfo.top; 1597149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } else { 1607149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas toLeft = postInfo.left; 1617149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas toTop = postInfo.top; 1627149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1637149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas return animateChange(oldHolder, newHolder, fromLeft, fromTop, toLeft, toTop); 1647149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 1657149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 1667149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 1677149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when an item is removed from the RecyclerView. Implementors can choose 1687149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * whether and how to animate that change, but must always call 1697149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #dispatchRemoveFinished(ViewHolder)} when done, either 1707149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * immediately (if no animation will occur) or after the animation actually finishes. 1717149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The return value indicates whether an animation has been set up and whether the 1727149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * ItemAnimator's {@link #runPendingAnimations()} method should be called at the 1737149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * next opportunity. This mechanism allows ItemAnimator to set up individual animations 1747149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * as separate calls to {@link #animateAdd(ViewHolder) animateAdd()}, 1757149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateMove(ViewHolder, int, int, int, int) animateMove()}, 1767149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateRemove(ViewHolder) animateRemove()}, and 1777149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateChange(ViewHolder, ViewHolder, int, int, int, int)} come in one by one, 1787149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * then start the animations together in the later call to {@link #runPendingAnimations()}. 1797149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 1807149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * <p>This method may also be called for disappearing items which continue to exist in the 1817149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * RecyclerView, but for which the system does not have enough information to animate 1827149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * them out of view. In that case, the default animation for removing items is run 1837149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * on those items as well.</p> 1847149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 1857149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param holder The item that is being removed. 1867149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @return true if a later call to {@link #runPendingAnimations()} is requested, 1877149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * false otherwise. 1887149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 1897149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public abstract boolean animateRemove(ViewHolder holder); 1907149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 1917149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 1927149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when an item is added to the RecyclerView. Implementors can choose 1937149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * whether and how to animate that change, but must always call 1947149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #dispatchAddFinished(ViewHolder)} when done, either 1957149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * immediately (if no animation will occur) or after the animation actually finishes. 1967149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The return value indicates whether an animation has been set up and whether the 1977149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * ItemAnimator's {@link #runPendingAnimations()} method should be called at the 1987149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * next opportunity. This mechanism allows ItemAnimator to set up individual animations 1997149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * as separate calls to {@link #animateAdd(ViewHolder) animateAdd()}, 2007149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateMove(ViewHolder, int, int, int, int) animateMove()}, 2017149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateRemove(ViewHolder) animateRemove()}, and 2027149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateChange(ViewHolder, ViewHolder, int, int, int, int)} come in one by one, 2037149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * then start the animations together in the later call to {@link #runPendingAnimations()}. 2047149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 2057149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * <p>This method may also be called for appearing items which were already in the 2067149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * RecyclerView, but for which the system does not have enough information to animate 2077149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * them into view. In that case, the default animation for adding items is run 2087149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * on those items as well.</p> 2097149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 2107149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param holder The item that is being added. 2117149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @return true if a later call to {@link #runPendingAnimations()} is requested, 2127149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * false otherwise. 2137149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 2147149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public abstract boolean animateAdd(ViewHolder holder); 2157149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 2167149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 2177149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when an item is moved in the RecyclerView. Implementors can choose 2187149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * whether and how to animate that change, but must always call 2197149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #dispatchMoveFinished(ViewHolder)} when done, either 2207149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * immediately (if no animation will occur) or after the animation actually finishes. 2217149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The return value indicates whether an animation has been set up and whether the 2227149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * ItemAnimator's {@link #runPendingAnimations()} method should be called at the 2237149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * next opportunity. This mechanism allows ItemAnimator to set up individual animations 2247149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * as separate calls to {@link #animateAdd(ViewHolder) animateAdd()}, 2257149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateMove(ViewHolder, int, int, int, int) animateMove()}, 2267149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateRemove(ViewHolder) animateRemove()}, and 2277149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateChange(ViewHolder, ViewHolder, int, int, int, int)} come in one by one, 2287149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * then start the animations together in the later call to {@link #runPendingAnimations()}. 2297149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 2307149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param holder The item that is being moved. 2317149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @return true if a later call to {@link #runPendingAnimations()} is requested, 2327149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * false otherwise. 2337149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 2347149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public abstract boolean animateMove(ViewHolder holder, int fromX, int fromY, 2357149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas int toX, int toY); 2367149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 2377149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 2387149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when an item is changed in the RecyclerView, as indicated by a call to 2397149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link Adapter#notifyItemChanged(int)} or 2407149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link Adapter#notifyItemRangeChanged(int, int)}. 2417149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * <p> 2427149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Implementers can choose whether and how to animate changes, but must always call 2437149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #dispatchChangeFinished(ViewHolder, boolean)} for each non-null distinct ViewHolder, 2447149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * either immediately (if no animation will occur) or after the animation actually finishes. 2457149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * If the {@code oldHolder} is the same ViewHolder as the {@code newHolder}, you must call 2467149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #dispatchChangeFinished(ViewHolder, boolean)} once and only once. In that case, the 2477149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * second parameter of {@code dispatchChangeFinished} is ignored. 2487149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * <p> 2497149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The return value indicates whether an animation has been set up and whether the 2507149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * ItemAnimator's {@link #runPendingAnimations()} method should be called at the 2517149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * next opportunity. This mechanism allows ItemAnimator to set up individual animations 2527149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * as separate calls to {@link #animateAdd(ViewHolder) animateAdd()}, 2537149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateMove(ViewHolder, int, int, int, int) animateMove()}, 2547149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateRemove(ViewHolder) animateRemove()}, and 2557149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateChange(ViewHolder, ViewHolder, int, int, int, int)} come in one by one, 2567149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * then start the animations together in the later call to {@link #runPendingAnimations()}. 2577149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 2587149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param oldHolder The original item that changed. 2597149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param newHolder The new item that was created with the changed content. Might be null 2607149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param fromLeft Left of the old view holder 2617149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param fromTop Top of the old view holder 2627149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param toLeft Left of the new view holder 2637149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param toTop Top of the new view holder 2647149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @return true if a later call to {@link #runPendingAnimations()} is requested, 2657149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * false otherwise. 2667149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 2677149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public abstract boolean animateChange(ViewHolder oldHolder, 2687149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop); 2697149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 2707149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 2717149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Method to be called by subclasses when a remove animation is done. 2727149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 2737149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The item which has been removed 2747149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @see RecyclerView.ItemAnimator#animateDisappearance(ViewHolder, ItemHolderInfo, 2757149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * ItemHolderInfo) 2767149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 2777149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public final void dispatchRemoveFinished(ViewHolder item) { 2787149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas onRemoveFinished(item); 2797149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas dispatchAnimationFinished(item); 2807149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 2817149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 2827149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 2837149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Method to be called by subclasses when a move animation is done. 2847149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 2857149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The item which has been moved 2867149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @see RecyclerView.ItemAnimator#animateDisappearance(ViewHolder, ItemHolderInfo, 2877149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * ItemHolderInfo) 2887149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @see RecyclerView.ItemAnimator#animatePersistence(ViewHolder, ItemHolderInfo, ItemHolderInfo) 2897149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @see RecyclerView.ItemAnimator#animateAppearance(ViewHolder, ItemHolderInfo, ItemHolderInfo) 2907149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 2917149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public final void dispatchMoveFinished(ViewHolder item) { 2927149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas onMoveFinished(item); 2937149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas dispatchAnimationFinished(item); 2947149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 2957149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 2967149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 2977149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Method to be called by subclasses when an add animation is done. 2987149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 2997149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The item which has been added 3007149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3017149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public final void dispatchAddFinished(ViewHolder item) { 3027149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas onAddFinished(item); 3037149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas dispatchAnimationFinished(item); 3047149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3057149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3067149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3077149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Method to be called by subclasses when a change animation is done. 3087149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 3097149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The item which has been changed (this method must be called for 3107149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * each non-null ViewHolder passed into 3117149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateChange(ViewHolder, ViewHolder, int, int, int, int)}). 3127149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param oldItem true if this is the old item that was changed, false if 3137149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * it is the new item that replaced the old item. 3147149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @see #animateChange(ViewHolder, ViewHolder, int, int, int, int) 3157149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3167149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public final void dispatchChangeFinished(ViewHolder item, boolean oldItem) { 3177149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas onChangeFinished(item, oldItem); 3187149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas dispatchAnimationFinished(item); 3197149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3207149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3217149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3227149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Method to be called by subclasses when a remove animation is being started. 3237149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 3247149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The item being removed 3257149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3267149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public final void dispatchRemoveStarting(ViewHolder item) { 3277149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas onRemoveStarting(item); 3287149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3297149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3307149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3317149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Method to be called by subclasses when a move animation is being started. 3327149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 3337149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The item being moved 3347149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3357149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public final void dispatchMoveStarting(ViewHolder item) { 3367149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas onMoveStarting(item); 3377149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3387149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3397149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3407149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Method to be called by subclasses when an add animation is being started. 3417149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 3427149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The item being added 3437149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3447149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public final void dispatchAddStarting(ViewHolder item) { 3457149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas onAddStarting(item); 3467149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3477149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3487149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3497149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Method to be called by subclasses when a change animation is being started. 3507149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 3517149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The item which has been changed (this method must be called for 3527149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * each non-null ViewHolder passed into 3537149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * {@link #animateChange(ViewHolder, ViewHolder, int, int, int, int)}). 3547149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param oldItem true if this is the old item that was changed, false if 3557149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * it is the new item that replaced the old item. 3567149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3577149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public final void dispatchChangeStarting(ViewHolder item, boolean oldItem) { 3587149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas onChangeStarting(item, oldItem); 3597149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3607149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3617149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3627149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when a remove animation is being started on the given ViewHolder. 3637149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The default implementation does nothing. Subclasses may wish to override 3647149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this method to handle any ViewHolder-specific operations linked to animation 3657149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * lifecycles. 3667149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 3677149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The ViewHolder being animated. 3687149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3697149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @SuppressWarnings("UnusedParameters") 3707149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void onRemoveStarting(ViewHolder item) { 3717149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3727149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3737149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3747149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when a remove animation has ended on the given ViewHolder. 3757149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The default implementation does nothing. Subclasses may wish to override 3767149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this method to handle any ViewHolder-specific operations linked to animation 3777149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * lifecycles. 3787149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 3797149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The ViewHolder being animated. 3807149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3817149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void onRemoveFinished(ViewHolder item) { 3827149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3837149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3847149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3857149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when an add animation is being started on the given ViewHolder. 3867149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The default implementation does nothing. Subclasses may wish to override 3877149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this method to handle any ViewHolder-specific operations linked to animation 3887149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * lifecycles. 3897149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 3907149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The ViewHolder being animated. 3917149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 3927149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @SuppressWarnings("UnusedParameters") 3937149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void onAddStarting(ViewHolder item) { 3947149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 3957149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 3967149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 3977149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when an add animation has ended on the given ViewHolder. 3987149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The default implementation does nothing. Subclasses may wish to override 3997149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this method to handle any ViewHolder-specific operations linked to animation 4007149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * lifecycles. 4017149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 4027149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The ViewHolder being animated. 4037149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 4047149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void onAddFinished(ViewHolder item) { 4057149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 4067149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 4077149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 4087149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when a move animation is being started on the given ViewHolder. 4097149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The default implementation does nothing. Subclasses may wish to override 4107149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this method to handle any ViewHolder-specific operations linked to animation 4117149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * lifecycles. 4127149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 4137149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The ViewHolder being animated. 4147149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 4157149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @SuppressWarnings("UnusedParameters") 4167149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void onMoveStarting(ViewHolder item) { 4177149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 4187149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 4197149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 4207149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when a move animation has ended on the given ViewHolder. 4217149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The default implementation does nothing. Subclasses may wish to override 4227149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this method to handle any ViewHolder-specific operations linked to animation 4237149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * lifecycles. 4247149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 4257149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The ViewHolder being animated. 4267149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 4277149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void onMoveFinished(ViewHolder item) { 4287149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 4297149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 4307149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 4317149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when a change animation is being started on the given ViewHolder. 4327149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The default implementation does nothing. Subclasses may wish to override 4337149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this method to handle any ViewHolder-specific operations linked to animation 4347149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * lifecycles. 4357149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 4367149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The ViewHolder being animated. 4377149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param oldItem true if this is the old item that was changed, false if 4387149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * it is the new item that replaced the old item. 4397149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 4407149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas @SuppressWarnings("UnusedParameters") 4417149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void onChangeStarting(ViewHolder item, boolean oldItem) { 4427149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 4437149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 4447149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas /** 4457149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * Called when a change animation has ended on the given ViewHolder. 4467149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * The default implementation does nothing. Subclasses may wish to override 4477149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * this method to handle any ViewHolder-specific operations linked to animation 4487149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * lifecycles. 4497149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * 4507149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param item The ViewHolder being animated. 4517149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * @param oldItem true if this is the old item that was changed, false if 4527149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas * it is the new item that replaced the old item. 4537149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas */ 4547149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas public void onChangeFinished(ViewHolder item, boolean oldItem) { 4557149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas } 4567149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas} 4577149a63961c5fe6706160bc717a3b6cbb083ca54Aurimas Liutikas 458