Most visited

Recently visited

RecyclerView.ItemAnimator

public static abstract class RecyclerView.ItemAnimator
extends Object

java.lang.Object
   ↳ android.support.v7.widget.RecyclerView.ItemAnimator
Known Direct Subclasses
Known Indirect Subclasses


该类定义了在对适配器进行更改时发生在项目上的动画。 ItemAnimator的子类可用于实现ViewHolder项目上的动作的自定义动画。 RecyclerView将管理在动画中保留这些项目,但实现者必须在ViewHolder的动画完成时调用dispatchAnimationFinished(ViewHolder) 换言之,必须有一个匹配dispatchAnimationFinished(ViewHolder)呼叫针对每个animateAppearance()animateChange() animatePersistence() ,和animateDisappearance()呼叫。

默认情况下,RecyclerView使用 DefaultItemAnimator

也可以看看:

Summary

Nested classes

@interface RecyclerView.ItemAnimator.AdapterChanges

可能传递给recordPreLayoutInformation(State, ViewHolder, int, List)的一组标志。

interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener

该接口用于通知监听器ItemAnimator中的所有挂起或正在运行的动画何时完成。

class RecyclerView.ItemAnimator.ItemHolderInfo

一个简单的数据结构,用于保存有关项目边界的信息。

Constants

int FLAG_APPEARED_IN_PRE_LAYOUT

这ViewHolder没有布局,但由已经被添加到布局,布局前的状态 RecyclerView.LayoutManager

int FLAG_CHANGED

此ViewHolder表示的项目已更新。

int FLAG_INVALIDATED

适配器 notifyDataSetChanged()已被调用,并且此ViewHolder表示的内容无效。

int FLAG_MOVED

此ViewHolder表示的项目的位置已更改。

int FLAG_REMOVED

由此ViewHolder表示的项目将从适配器中删除。

Public constructors

RecyclerView.ItemAnimator()

Public methods

abstract boolean animateAppearance(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo)

当ViewHolder添加到布局时,由RecyclerView调用。

abstract boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo)

在布局和RecyclerView收到 notifyItemChanged(int)呼叫之前和之后,当适配器项存在时,由RecyclerView调用。

abstract boolean animateDisappearance(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo)

当ViewHolder从布局中消失时,由RecyclerView调用。

abstract boolean animatePersistence(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo)

当布局和RecyclerView尚未收到 notifyItemChanged(int)呼叫或 notifyDataSetChanged()呼叫之前和之后ViewHolder出现时,由RecyclerView调用。

boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder, List<Object> payloads)

当一个项目被改变时,ItemAnimator可以决定是否要为动画重用相同的ViewHolder,或者RecyclerView应该创建该项目的副本,并且ItemAnimator将使用两者来运行动画(例如

boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder)

当一个项目被改变时,ItemAnimator可以决定是否要为动画重用相同的ViewHolder,或者RecyclerView应该创建该项目的副本,并且ItemAnimator将使用两者来运行动画(例如

final void dispatchAnimationFinished(RecyclerView.ViewHolder viewHolder)

方法在动画完成时由子类调用。

final void dispatchAnimationStarted(RecyclerView.ViewHolder viewHolder)

在动画启动时由子类调用的方法。

final void dispatchAnimationsFinished()

此方法应由ItemAnimator实现调用,以通知任何侦听器所有待处理和活动项目动画都已完成。

abstract void endAnimation(RecyclerView.ViewHolder item)

方法在视图上的动画应该立即结束时调用。

abstract void endAnimations()

当所有项目动画应该立即结束时调用该方法。

long getAddDuration()

获取所有添加动画将运行的当前持续时间。

long getChangeDuration()

获取所有更改动画将运行的当前持续时间。

long getMoveDuration()

获取所有移动动画将运行的当前持续时间。

long getRemoveDuration()

获取所有删除动画将运行的当前持续时间。

abstract boolean isRunning()

返回当前是否有任何项目动画正在运行的方法。

final boolean isRunning(RecyclerView.ItemAnimator.ItemAnimatorFinishedListener listener)

isRunning()一样,此方法返回当前是否有任何项目动画正在运行。

RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo()

返回一个新 RecyclerView.ItemAnimator.ItemHolderInfo将被用于存储有关ViewHolder信息。

void onAnimationFinished(RecyclerView.ViewHolder viewHolder)

由ItemAniamtor调用 dispatchAnimationFinished(ViewHolder)后调用。

void onAnimationStarted(RecyclerView.ViewHolder viewHolder)

在给定ViewHolder上启动新动画时调用。

RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(RecyclerView.State state, RecyclerView.ViewHolder viewHolder)

布局完成后,由RecyclerView调用。

RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(RecyclerView.State state, RecyclerView.ViewHolder viewHolder, int changeFlags, List<Object> payloads)

在布局开始之前由RecyclerView调用。

abstract void runPendingAnimations()

当有待处理的动画等待启动时调用。

void setAddDuration(long addDuration)

设置所有添加动画将运行的持续时间。

void setChangeDuration(long changeDuration)

设置所有更改动画将运行的持续时间。

void setMoveDuration(long moveDuration)

设置所有移动动画运行的持续时间。

void setRemoveDuration(long removeDuration)

设置所有删除动画将运行的持续时间。

Inherited methods

From class java.lang.Object

Constants

FLAG_APPEARED_IN_PRE_LAYOUT

int FLAG_APPEARED_IN_PRE_LAYOUT

这ViewHolder没有布局,但由已经被添加到布局,布局前的状态RecyclerView.LayoutManager 这意味着该项目已在适配器中,但不可见,并且可能在后期布局阶段显示。 LayoutManagers可能更喜欢在布局前添加新项目,以便在不可见时指定它们的虚拟位置(例如,指定项目应该从可见区域下方进行动画制作 )。

也可以看看:

常量值:4096(0x00001000)

FLAG_CHANGED

int FLAG_CHANGED

此ViewHolder表示的项目已更新。

也可以看看:

常量值:2(0x00000002)

FLAG_INVALIDATED

int FLAG_INVALIDATED

适配器 notifyDataSetChanged()已被调用,并且此ViewHolder表示的内容无效。

也可以看看:

常量值:4(0x00000004)

FLAG_MOVED

int FLAG_MOVED

此ViewHolder表示的项目的位置已更改。 这个标志没有绑定到notifyItemMoved(int, int) 它可能会被设置为响应任何可能会对此项目产生副作用的适配器更改。 (例如,此项目之前的项目已从适配器中删除)。

也可以看看:

常量值:2048(0x00000800)

FLAG_REMOVED

int FLAG_REMOVED

由此ViewHolder表示的项目将从适配器中删除。

也可以看看:

常量值:8(0x00000008)

Public constructors

RecyclerView.ItemAnimator

RecyclerView.ItemAnimator ()

Public methods

animateAppearance

boolean animateAppearance (RecyclerView.ViewHolder viewHolder, 
                RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, 
                RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo)

当ViewHolder添加到布局时,由RecyclerView调用。

详细来说,这意味着ViewHolder在布局开始时不是孩子,而是由LayoutManager添加的。 它可能是新添加到适配器或由于其他因素而变得可见。

ItemAnimator必须调用 dispatchAnimationFinished(ViewHolder)动画完成时(或迅速调 dispatchAnimationFinished(ViewHolder) ,如果它决定不动画视图)。

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder which should be animated
preLayoutInfo RecyclerView.ItemAnimator.ItemHolderInfo: The information that was returned from recordPreLayoutInformation(State, ViewHolder, int, List). Might be null if Item was just added to the adapter or LayoutManager does not support predictive animations or it could not predict that this ViewHolder will become visible.
postLayoutInfo RecyclerView.ItemAnimator.ItemHolderInfo: The information that was returned from recordPreLayoutInformation(State, ViewHolder, int, List).
Returns
boolean true if a later call to runPendingAnimations() is requested, false otherwise.

animateChange

boolean animateChange (RecyclerView.ViewHolder oldHolder, 
                RecyclerView.ViewHolder newHolder, 
                RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, 
                RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo)

在布局和RecyclerView收到notifyItemChanged(int)呼叫之前和之后,当适配器项目存在时,由RecyclerView调用。 当调用notifyDataSetChanged()并且适配器具有稳定的ID时,也可以调用此方法,以便RecyclerView仍然可以将视图重新绑定到相同的ViewHolders。 如果viewType当改变notifyDataSetChanged()被调用时,此方法将不会被调用,而是animateAppearance(ViewHolder, ItemHolderInfo, ItemHolderInfo)将被称为新ViewHolder和旧的将被回收。

如果由于调用notifyDataSetChanged()调用此方法,则很有可能项目内容没有真正改变,但是它会从适配器中反弹。 如果屏幕上的位置没有改变,那么DefaultItemAnimator会跳过视图的动画,并且动画师也应该处理这种情况,并避免创建不必要的动画。

当一个项目被更新时,ItemAnimator有机会要求RecyclerView保持原先的项目呈现状态,并为更新后的演示文稿提供一个新的ViewHolder(参见: canReuseUpdatedViewHolder(ViewHolder, List) 。如果您不知道该项目,并希望交叉淡出旧的和新的( DefaultItemAnimator使用这种技术)。

当您为自己的布局编写自定义项目动画时,重新使用相同的ViewHolder并手动为内容更改设置动画效果可能更具性能和优雅。

notifyItemChanged(int) ,项目的视图类型可能会更改。 如果项目的视图类型已更改或ItemAnimator返回false这个ViewHolder时canReuseUpdatedViewHolder(ViewHolder, List)被调用时, oldHoldernewHolder会有所不同ViewHolder实例代表相同的项目。 在这种情况下,只有新的ViewHolder对LayoutManager可见,但RecyclerView会为动画添加旧的ViewHolder。

ItemAnimator必须调用 dispatchAnimationFinished(ViewHolder)为每个不同的ViewHolder当他们的动画完成(或迅速调 dispatchAnimationFinished(ViewHolder) ,如果它决定不动画视图)。

如果oldHolder和newHolder是同一个实例,则应该 调用 一次 dispatchAnimationFinished(ViewHolder)

请注意,当ViewHolder同时在同一布局传递中更改并消失时,RecyclerView将调用的动画回调方法取决于ItemAnimator是否重新使用相同ViewHolder的决定,也取决于LayoutManager是否布局消失的ViewHolder的更改版本与否。 当且仅当falsecanReuseUpdatedViewHolder返回false ,并且LayoutManager布局一个新的消失视图以保存更新的信息时,RecyclerView将调用animateChange而不是animateDisappearance 内置的LayoutManagers尽量避免布置消失视图的更新版本。

Parameters
oldHolder RecyclerView.ViewHolder: The ViewHolder before the layout is started, might be the same instance with newHolder.
newHolder RecyclerView.ViewHolder: The ViewHolder after the layout is finished, might be the same instance with oldHolder.
preLayoutInfo RecyclerView.ItemAnimator.ItemHolderInfo: The information that was returned from recordPreLayoutInformation(State, ViewHolder, int, List).
postLayoutInfo RecyclerView.ItemAnimator.ItemHolderInfo: The information that was returned from recordPreLayoutInformation(State, ViewHolder, int, List).
Returns
boolean true if a later call to runPendingAnimations() is requested, false otherwise.

animateDisappearance

boolean animateDisappearance (RecyclerView.ViewHolder viewHolder, 
                RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, 
                RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo)

当ViewHolder从布局中消失时,由RecyclerView调用。

这意味着当布局启动时,View是LayoutManager的一个子元素,但已被LayoutManager删除。 它可能已从适配器中删除,或者由于其他因素而变得不可见。 您可以通过检查传递给recordPreLayoutInformation(State, ViewHolder, int, List)的更改标志来区分这两种情况。

请注意,当ViewHolder同时在同一布局传递中更改并消失时,RecyclerView将调用的动画回调方法取决于ItemAnimator是否重新使用相同ViewHolder的决定,也取决于LayoutManager是否布局消失的ViewHolder的更改版本与否。 当且仅当falsecanReuseUpdatedViewHolder返回false ,并且LayoutManager布局一个新的消失视图以保存更新的信息时,RecyclerView将调用animateChange而不是animateDisappearance 内置的LayoutManagers尽量避免布置消失视图的更新版本。

如果LayoutManager支持预测动画,则可以通过将视图放置在该位置来为视图提供目标消失位置。 当发生这种情况时,RecyclerView将调用recordPostLayoutInformation(State, ViewHolder) ,该调用的响应将作为postLayoutInfo传递给此方法。

ItemAnimator必须调用 dispatchAnimationFinished(ViewHolder)动画完成时(或迅速调 dispatchAnimationFinished(ViewHolder) ,如果它决定不动画视图)。

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder which should be animated
preLayoutInfo RecyclerView.ItemAnimator.ItemHolderInfo: The information that was returned from recordPreLayoutInformation(State, ViewHolder, int, List).
postLayoutInfo RecyclerView.ItemAnimator.ItemHolderInfo: The information that was returned from recordPostLayoutInformation(State, ViewHolder). Might be null if the LayoutManager did not layout the item.
Returns
boolean true if a later call to runPendingAnimations() is requested, false otherwise.

animatePersistence

boolean animatePersistence (RecyclerView.ViewHolder viewHolder, 
                RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, 
                RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo)

在布局和RecyclerView尚未收到 notifyItemChanged(int)呼叫或 notifyDataSetChanged()呼叫之前和之后,如果ViewHolder存在, notifyDataSetChanged()调用。

这个ViewHolder仍然代表与布局开始时代表的数据相同的数据,但其布局管理器可以更改其位置/大小。

如果项目的布局位置没有改变,RecyclerView仍然会调用这个方法,因为它不会跟踪这些信息(或者不一定知道不需要动画)。 你的ItemAnimator应该处理这种情况,如果没有任何动画,它应该调用dispatchAnimationFinished(ViewHolder)并返回false

ItemAnimator必须调用 dispatchAnimationFinished(ViewHolder)动画完成时(或迅速调 dispatchAnimationFinished(ViewHolder) ,如果它决定不动画视图)。

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder which should be animated
preLayoutInfo RecyclerView.ItemAnimator.ItemHolderInfo: The information that was returned from recordPreLayoutInformation(State, ViewHolder, int, List).
postLayoutInfo RecyclerView.ItemAnimator.ItemHolderInfo: The information that was returned from recordPreLayoutInformation(State, ViewHolder, int, List).
Returns
boolean true if a later call to runPendingAnimations() is requested, false otherwise.

canReuseUpdatedViewHolder

boolean canReuseUpdatedViewHolder (RecyclerView.ViewHolder viewHolder, 
                List<Object> payloads)

当一个项目被更改时,ItemAnimator可以决定是否要为动画重用相同的ViewHolder,或者RecyclerView应该创建该项目的副本,并且ItemAnimator将使用两者来运行动画(例如交叉渐变)。

请注意,只有在RecyclerView.ViewHolder仍具有相同类型( getItemViewType(int) )时才会调用此方法。 否则,ItemAnimator将始终通过animateChange(ViewHolder, ViewHolder, ItemHolderInfo, ItemHolderInfo)方法接收两个RecyclerView.ViewHolder

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder which represents the changed item's old content.
payloads List: A non-null list of merged payloads that were sent with change notifications. Can be empty if the adapter is invalidated via notifyDataSetChanged(). The same list of payloads will be passed into onBindViewHolder(ViewHolder, int, List) method if this method returns true.
Returns
boolean True if RecyclerView should just rebind to the same ViewHolder or false if RecyclerView should create a new ViewHolder and pass this ViewHolder to the ItemAnimator to animate. Default implementation calls canReuseUpdatedViewHolder(ViewHolder).

也可以看看:

canReuseUpdatedViewHolder

boolean canReuseUpdatedViewHolder (RecyclerView.ViewHolder viewHolder)

当一个项目被更改时,ItemAnimator可以决定是否要为动画重用相同的ViewHolder,或者RecyclerView应该创建该项目的副本,并且ItemAnimator将使用两者来运行动画(例如交叉渐变)。

请注意,只有在RecyclerView.ViewHolder仍具有相同类型( getItemViewType(int) )时才会调用此方法。 否则,ItemAnimator将始终以animateChange(ViewHolder, ViewHolder, ItemHolderInfo, ItemHolderInfo)方法接收两个RecyclerView.ViewHolder

如果您的应用程序正在使用更改有效内容,则可以覆盖 canReuseUpdatedViewHolder(ViewHolder, List)以根据有效 canReuseUpdatedViewHolder(ViewHolder, List)进行确定。

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder which represents the changed item's old content.
Returns
boolean True if RecyclerView should just rebind to the same ViewHolder or false if RecyclerView should create a new ViewHolder and pass this ViewHolder to the ItemAnimator to animate. Default implementation returns true.

也可以看看:

dispatchAnimationFinished

void dispatchAnimationFinished (RecyclerView.ViewHolder viewHolder)

方法在动画完成时由子类调用。

每次调用RecyclerView使得到 animateAppearance()animatePersistence() ,或 animateDisappearance() ,应该有一个匹配 dispatchAnimationFinished(ViewHolder)调用由子类。

对于 animateChange() ,sublcass应该为 oldHoldernewHolder调用此方法(如果它们不是相同的实例)。

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder whose animation is finished.

也可以看看:

dispatchAnimationStarted

void dispatchAnimationStarted (RecyclerView.ViewHolder viewHolder)

在动画启动时由子类调用的方法。

每次调用RecyclerView使得到 animateAppearance()animatePersistence() ,或 animateDisappearance() ,应该有一个匹配 dispatchAnimationStarted(ViewHolder)调用由子类。

对于 animateChange() ,sublcass应为 oldHoldernewHolder调用此方法(如果它们不是相同的实例)。

如果您的ItemAnimator决定不设置ViewHolder的动画,则应调用 dispatchAnimationFinished(ViewHolder) 而不要致电 dispatchAnimationStarted(ViewHolder)

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder whose animation is starting.

也可以看看:

dispatchAnimationsFinished

void dispatchAnimationsFinished ()

此方法应由ItemAnimator实现调用,以通知任何侦听器所有待处理和活动项目动画都已完成。

endAnimation

void endAnimation (RecyclerView.ViewHolder item)

方法在视图上的动画应该立即结束时调用。 当发生其他事件(如滚动)时,可能会发生这种情况,以便将动画视图快速放入其正确的终点位置。 实现应确保该项目上运行的任何动画都被取消,并且受影响的属性将设置为其最终值。 另外,应该为每个完成的动画调用dispatchAnimationFinished(ViewHolder) ,因为在调用此方法时动画是有效完成的。

Parameters
item RecyclerView.ViewHolder: The item for which an animation should be stopped.

endAnimations

void endAnimations ()

当所有项目动画应该立即结束时调用该方法。 当发生其他事件(如滚动)时,可能会发生这种情况,以便将动画视图快速放入其正确的终点位置。 实现应确保任何项目上运行的任何动画都被取消,并且受影响的属性将设置为其最终值。 另外,应该为每个完成的动画调用dispatchAnimationFinished(ViewHolder) ,因为在调用此方法时有效地完成了动画。

getAddDuration

long getAddDuration ()

获取所有添加动画将运行的当前持续时间。

Returns
long The current add duration

getChangeDuration

long getChangeDuration ()

获取所有更改动画将运行的当前持续时间。

Returns
long The current change duration

getMoveDuration

long getMoveDuration ()

获取所有移动动画将运行的当前持续时间。

Returns
long The current move duration

getRemoveDuration

long getRemoveDuration ()

获取所有删除动画将运行的当前持续时间。

Returns
long The current remove duration

isRunning

boolean isRunning ()

返回当前是否有任何项目动画正在运行的方法。 此方法可用于确定是否延迟其他操作直到动画结束。

Returns
boolean true if there are any item animations currently running, false otherwise.

isRunning

boolean isRunning (RecyclerView.ItemAnimator.ItemAnimatorFinishedListener listener)

isRunning()一样,此方法返回当前是否有任何项目动画正在运行。 另外,如果没有项目动画正在运行,传入的侦听器将立即被调用,如果当前没有动画正在运行,或者当前正在运行的动画是finished ,则立即(在方法返回之前)。

请注意,侦听器是暂时的 - 它要么立即调用,要么根本不存储,要么只在运行动画稍后完成时才被调用。

Parameters
listener RecyclerView.ItemAnimator.ItemAnimatorFinishedListener: A listener to be called immediately if no animations are running or later when currently-running animations have finished. A null listener is equivalent to calling isRunning().
Returns
boolean true if there are any item animations currently running, false otherwise.

obtainHolderInfo

RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo ()

返回一个新RecyclerView.ItemAnimator.ItemHolderInfo将被用于存储有关ViewHolder信息。 这些信息稍后将传递给animate**方法。

如果您想扩展 RecyclerView.ItemAnimator.ItemHolderInfo并提供您自己的实例,则可以覆盖此方法。

Returns
RecyclerView.ItemAnimator.ItemHolderInfo A new RecyclerView.ItemAnimator.ItemHolderInfo.

onAnimationFinished

void onAnimationFinished (RecyclerView.ViewHolder viewHolder)

由ItemAniamtor调用 dispatchAnimationFinished(ViewHolder)后调用。

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder whose animation is finished. There might still be other animations running on this ViewHolder.

也可以看看:

onAnimationStarted

void onAnimationStarted (RecyclerView.ViewHolder viewHolder)

在给定ViewHolder上启动新动画时调用。

Parameters
viewHolder RecyclerView.ViewHolder: The ViewHolder which started animating. Note that the ViewHolder might already be animating and this might be another animation.

也可以看看:

recordPostLayoutInformation

RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation (RecyclerView.State state, 
                RecyclerView.ViewHolder viewHolder)

布局完成后,由RecyclerView调用。 项目动画师应该记录有关视图最终状态的必要信息。

从这个方法返回的数据将被传递给相关的 animate**方法。

默认实现返回一个 RecyclerView.ItemAnimator.ItemHolderInfo ,它保存视图的边界。

Parameters
state RecyclerView.State: The current State of RecyclerView which includes some useful data about the layout that will be calculated.
viewHolder RecyclerView.ViewHolder: The ViewHolder whose information should be recorded.
Returns
RecyclerView.ItemAnimator.ItemHolderInfo An ItemHolderInfo that preserves necessary information about the ViewHolder. This object will be passed back to related animate** methods when RecyclerView decides how items should be animated.

也可以看看:

recordPreLayoutInformation

RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation (RecyclerView.State state, 
                RecyclerView.ViewHolder viewHolder, 
                int changeFlags, 
                List<Object> payloads)

在布局开始之前由RecyclerView调用。 项目动画师应该在视图被潜在反弹,移动或移除之前记录有关视图的必要信息。

从这个方法返回的数据将被传递给相关的 animate**方法。

请注意,如果LayoutManager在预布局阶段将新视图添加到布局,则可能会在预布局阶段后调用此方法。

默认实现返回一个 RecyclerView.ItemAnimator.ItemHolderInfo ,它保存视图和适配器更改标志的边界。

Parameters
state RecyclerView.State: The current State of RecyclerView which includes some useful data about the layout that will be calculated.
viewHolder RecyclerView.ViewHolder: The ViewHolder whose information should be recorded.
changeFlags int: Additional information about what changes happened in the Adapter about the Item represented by this ViewHolder. For instance, if item is deleted from the adapter, FLAG_REMOVED will be set.
payloads List: The payload list that was previously passed to notifyItemChanged(int, Object) or notifyItemRangeChanged(int, int, Object).
Returns
RecyclerView.ItemAnimator.ItemHolderInfo An ItemHolderInfo instance that preserves necessary information about the ViewHolder. This object will be passed back to related animate** methods after layout is complete.

也可以看看:

runPendingAnimations

void runPendingAnimations ()

当有待处理的动画等待启动时调用。 这种状态是由返回值从管辖animateAppearance()animateChange() animatePersistence()animateDisappearance() ,该通知RecyclerView的ItemAnimator希望稍后调用来启动相关的动画。 runPendingAnimations()将被安排在下一帧上运行。

setAddDuration

void setAddDuration (long addDuration)

设置所有添加动画将运行的持续时间。

Parameters
addDuration long: The add duration

setChangeDuration

void setChangeDuration (long changeDuration)

设置所有更改动画将运行的持续时间。

Parameters
changeDuration long: The change duration

setMoveDuration

void setMoveDuration (long moveDuration)

设置所有移动动画运行的持续时间。

Parameters
moveDuration long: The move duration

setRemoveDuration

void setRemoveDuration (long removeDuration)

设置所有删除动画将运行的持续时间。

Parameters
removeDuration long: The remove duration

Hooray!