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
。
Nested classes |
|
---|---|
@interface |
RecyclerView.ItemAnimator.AdapterChanges 可能传递给 |
interface |
RecyclerView.ItemAnimator.ItemAnimatorFinishedListener 该接口用于通知监听器ItemAnimator中的所有挂起或正在运行的动画何时完成。 |
class |
RecyclerView.ItemAnimator.ItemHolderInfo 一个简单的数据结构,用于保存有关项目边界的信息。 |
Constants |
|
---|---|
int |
FLAG_APPEARED_IN_PRE_LAYOUT 这ViewHolder没有布局,但由已经被添加到布局,布局前的状态 |
int |
FLAG_CHANGED 此ViewHolder表示的项目已更新。 |
int |
FLAG_INVALIDATED 适配器 |
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收到 |
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尚未收到 |
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) 像 |
RecyclerView.ItemAnimator.ItemHolderInfo |
obtainHolderInfo() 返回一个新 |
void |
onAnimationFinished(RecyclerView.ViewHolder viewHolder) 由ItemAniamtor调用 |
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
|
int FLAG_APPEARED_IN_PRE_LAYOUT
这ViewHolder没有布局,但由已经被添加到布局,布局前的状态RecyclerView.LayoutManager
。 这意味着该项目已在适配器中,但不可见,并且可能在后期布局阶段显示。 LayoutManagers可能更喜欢在布局前添加新项目,以便在不可见时指定它们的虚拟位置(例如,指定项目应该从可见区域下方进行动画制作 )。
常量值:4096(0x00001000)
int FLAG_CHANGED
此ViewHolder表示的项目已更新。
常量值:2(0x00000002)
int FLAG_INVALIDATED
适配器 notifyDataSetChanged()
已被调用,并且此ViewHolder表示的内容无效。
常量值:4(0x00000004)
int FLAG_MOVED
此ViewHolder表示的项目的位置已更改。 这个标志没有绑定到notifyItemMoved(int, int)
。 它可能会被设置为响应任何可能会对此项目产生副作用的适配器更改。 (例如,此项目之前的项目已从适配器中删除)。
常量值:2048(0x00000800)
int FLAG_REMOVED
由此ViewHolder表示的项目将从适配器中删除。
常量值:8(0x00000008)
RecyclerView.ItemAnimator ()
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. |
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)
被调用时, oldHolder
和newHolder
会有所不同ViewHolder实例代表相同的项目。 在这种情况下,只有新的ViewHolder对LayoutManager可见,但RecyclerView会为动画添加旧的ViewHolder。
ItemAnimator必须调用 dispatchAnimationFinished(ViewHolder)
为每个不同的ViewHolder当他们的动画完成(或迅速调 dispatchAnimationFinished(ViewHolder)
,如果它决定不动画视图)。
如果oldHolder和newHolder是同一个实例,则应该 只调用 一次 dispatchAnimationFinished(ViewHolder)
。
请注意,当ViewHolder同时在同一布局传递中更改并消失时,RecyclerView将调用的动画回调方法取决于ItemAnimator是否重新使用相同ViewHolder的决定,也取决于LayoutManager是否布局消失的ViewHolder的更改版本与否。 当且仅当false
从canReuseUpdatedViewHolder
返回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. |
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的更改版本与否。 当且仅当false
从canReuseUpdatedViewHolder
返回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. |
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. |
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) . |
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 . |
void dispatchAnimationFinished (RecyclerView.ViewHolder viewHolder)
方法在动画完成时由子类调用。
每次调用RecyclerView使得到 animateAppearance()
, animatePersistence()
,或 animateDisappearance()
,应该有一个匹配 dispatchAnimationFinished(ViewHolder)
调用由子类。
对于 animateChange()
,sublcass应该为 oldHolder
和 newHolder
调用此方法(如果它们不是相同的实例)。
Parameters | |
---|---|
viewHolder |
RecyclerView.ViewHolder : The ViewHolder whose animation is finished. |
void dispatchAnimationStarted (RecyclerView.ViewHolder viewHolder)
在动画启动时由子类调用的方法。
每次调用RecyclerView使得到 animateAppearance()
, animatePersistence()
,或 animateDisappearance()
,应该有一个匹配 dispatchAnimationStarted(ViewHolder)
调用由子类。
对于 animateChange()
,sublcass应为 oldHolder
和 newHolder
调用此方法(如果它们不是相同的实例)。
如果您的ItemAnimator决定不设置ViewHolder的动画,则应调用 dispatchAnimationFinished(ViewHolder)
而不要致电 dispatchAnimationStarted(ViewHolder)
。
Parameters | |
---|---|
viewHolder |
RecyclerView.ViewHolder : The ViewHolder whose animation is starting. |
void dispatchAnimationsFinished ()
此方法应由ItemAnimator实现调用,以通知任何侦听器所有待处理和活动项目动画都已完成。
void endAnimation (RecyclerView.ViewHolder item)
方法在视图上的动画应该立即结束时调用。 当发生其他事件(如滚动)时,可能会发生这种情况,以便将动画视图快速放入其正确的终点位置。 实现应确保该项目上运行的任何动画都被取消,并且受影响的属性将设置为其最终值。 另外,应该为每个完成的动画调用dispatchAnimationFinished(ViewHolder)
,因为在调用此方法时动画是有效完成的。
Parameters | |
---|---|
item |
RecyclerView.ViewHolder : The item for which an animation should be stopped. |
void endAnimations ()
当所有项目动画应该立即结束时调用该方法。 当发生其他事件(如滚动)时,可能会发生这种情况,以便将动画视图快速放入其正确的终点位置。 实现应确保任何项目上运行的任何动画都被取消,并且受影响的属性将设置为其最终值。 另外,应该为每个完成的动画调用dispatchAnimationFinished(ViewHolder)
,因为在调用此方法时有效地完成了动画。
long getAddDuration ()
获取所有添加动画将运行的当前持续时间。
Returns | |
---|---|
long |
The current add duration |
long getChangeDuration ()
获取所有更改动画将运行的当前持续时间。
Returns | |
---|---|
long |
The current change duration |
long getMoveDuration ()
获取所有移动动画将运行的当前持续时间。
Returns | |
---|---|
long |
The current move duration |
long getRemoveDuration ()
获取所有删除动画将运行的当前持续时间。
Returns | |
---|---|
long |
The current remove duration |
boolean isRunning ()
返回当前是否有任何项目动画正在运行的方法。 此方法可用于确定是否延迟其他操作直到动画结束。
Returns | |
---|---|
boolean |
true if there are any item animations currently running, false otherwise. |
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. |
RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo ()
返回一个新RecyclerView.ItemAnimator.ItemHolderInfo
将被用于存储有关ViewHolder信息。 这些信息稍后将传递给animate**
方法。
如果您想扩展 RecyclerView.ItemAnimator.ItemHolderInfo
并提供您自己的实例,则可以覆盖此方法。
Returns | |
---|---|
RecyclerView.ItemAnimator.ItemHolderInfo |
A new RecyclerView.ItemAnimator.ItemHolderInfo . |
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. |
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. |
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(State, ViewHolder, int, List)
animateAppearance(ViewHolder, ItemHolderInfo, ItemHolderInfo)
animateDisappearance(ViewHolder, ItemHolderInfo, ItemHolderInfo)
animateChange(ViewHolder, ViewHolder, ItemHolderInfo, ItemHolderInfo)
animatePersistence(ViewHolder, ItemHolderInfo, ItemHolderInfo)
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. |
也可以看看:
recordPostLayoutInformation(State, ViewHolder)
animateAppearance(ViewHolder, ItemHolderInfo, ItemHolderInfo)
animateDisappearance(ViewHolder, ItemHolderInfo, ItemHolderInfo)
animateChange(ViewHolder, ViewHolder, ItemHolderInfo, ItemHolderInfo)
animatePersistence(ViewHolder, ItemHolderInfo, ItemHolderInfo)
void runPendingAnimations ()
当有待处理的动画等待启动时调用。 这种状态是由返回值从管辖animateAppearance()
, animateChange()
animatePersistence()
和animateDisappearance()
,该通知RecyclerView的ItemAnimator希望稍后调用来启动相关的动画。 runPendingAnimations()将被安排在下一帧上运行。
void setAddDuration (long addDuration)
设置所有添加动画将运行的持续时间。
Parameters | |
---|---|
addDuration |
long : The add duration |
void setChangeDuration (long changeDuration)
设置所有更改动画将运行的持续时间。
Parameters | |
---|---|
changeDuration |
long : The change duration |
void setMoveDuration (long moveDuration)
设置所有移动动画运行的持续时间。
Parameters | |
---|---|
moveDuration |
long : The move duration |
void setRemoveDuration (long removeDuration)
设置所有删除动画将运行的持续时间。
Parameters | |
---|---|
removeDuration |
long : The remove duration |