public class DefaultItemAnimator
extends SimpleItemAnimator
java.lang.Object | |||
↳ | android.support.v7.widget.RecyclerView.ItemAnimator | ||
↳ | android.support.v7.widget.SimpleItemAnimator | ||
↳ | android.support.v7.widget.DefaultItemAnimator |
RecyclerView.ItemAnimator
这个实现为移除,添加和移动发生在RecyclerView中的项目的事件提供了基本的动画。 RecyclerView默认使用DefaultItemAnimator。
Inherited constants |
---|
From class android.support.v7.widget.RecyclerView.ItemAnimator
|
Public constructors |
|
---|---|
DefaultItemAnimator() |
Public methods |
|
---|---|
boolean |
animateAdd(RecyclerView.ViewHolder holder) 在将项目添加到RecyclerView时调用。 |
boolean |
animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromX, int fromY, int toX, int toY) 在RecyclerView中更改项目时调用,如调用 |
boolean |
animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) 在RecyclerView中移动项目时调用。 |
boolean |
animateRemove(RecyclerView.ViewHolder holder) 从RecyclerView中删除一个项目时调用。 |
boolean |
canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder, List<Object> payloads) 当一个项目被改变时,ItemAnimator可以决定是否要为动画重用相同的ViewHolder,或者RecyclerView应该创建该项目的副本,并且ItemAnimator将使用两者来运行动画(例如 如果有效载荷列表不是空的,则DefaultItemAnimator返回 |
void |
endAnimation(RecyclerView.ViewHolder item) 方法在视图上的动画应该立即结束时调用。 |
void |
endAnimations() 当所有项目动画应该立即结束时调用该方法。 |
boolean |
isRunning() 返回当前是否有任何项目动画正在运行的方法。 |
void |
runPendingAnimations() 当有待处理的动画等待启动时调用。 |
Inherited methods |
|
---|---|
From class android.support.v7.widget.SimpleItemAnimator
|
|
From class android.support.v7.widget.RecyclerView.ItemAnimator
|
|
From class java.lang.Object
|
DefaultItemAnimator ()
boolean animateAdd (RecyclerView.ViewHolder holder)
在将项目添加到RecyclerView时调用。 实现者可以选择是否以及如何动画变化,但必须在完成后始终调用dispatchAddFinished(ViewHolder)
,或者立即(如果没有动画发生)或动画实际完成后调用。 返回值表示动画是否已经成立,以及是否ItemAnimator的runPendingAnimations()
方法应该在下次有机会被调用。 这种机制允许ItemAnimator个别动画作为单独的电话设置为animateAdd()
, animateMove()
, animateRemove()
,并animateChange(ViewHolder, ViewHolder, int, int, int, int)
进来一个接一个,然后到后来的呼叫启动动画一起runPendingAnimations()
。
这个方法也可能被调用来显示已经在RecyclerView中的项目,但是系统没有足够的信息来将它们动画到视图中。 在这种情况下,添加项目的默认动画也会在这些项目上运行。
Parameters | |
---|---|
holder |
RecyclerView.ViewHolder : The item that is being added. |
Returns | |
---|---|
boolean |
true if a later call to runPendingAnimations() is requested, false otherwise. |
boolean animateChange (RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromX, int fromY, int toX, int toY)
在RecyclerView中更改项目时调用,如调用 notifyItemChanged(int)
或 notifyItemRangeChanged(int, int)
。
实施者可以选择是否和如何制作动画的变化,但必须随时拨打dispatchChangeFinished(ViewHolder, boolean)
每个非空不同ViewHolder,可以立即(如果不会出现动画)或动画后实际完成。 如果oldHolder
与oldHolder
是相同的newHolder
,则必须一次且仅调用一次dispatchChangeFinished(ViewHolder, boolean)
。 在这种情况下,第二个参数dispatchChangeFinished
被忽略。
返回值指示是否已经设置了动画,以及是否应该在下一次调用runPendingAnimations()
方法runPendingAnimations()
方法。 这种机制允许ItemAnimator个别动画作为单独的电话设置为animateAdd()
, animateMove()
, animateRemove()
,并animateChange(ViewHolder, ViewHolder, int, int, int, int)
进来一个接一个,然后到后来的呼叫启动动画一起runPendingAnimations()
。
Parameters | |
---|---|
oldHolder |
RecyclerView.ViewHolder : The original item that changed. |
newHolder |
RecyclerView.ViewHolder : The new item that was created with the changed content. Might be null |
fromX |
int : Left of the old view holder |
fromY |
int : Top of the old view holder |
toX |
int : Left of the new view holder |
toY |
int : Top of the new view holder |
Returns | |
---|---|
boolean |
true if a later call to runPendingAnimations() is requested, false otherwise. |
boolean animateMove (RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY)
在RecyclerView中移动项目时调用。 实现者可以选择是否以及如何动画变化,但必须在完成后始终调用dispatchMoveFinished(ViewHolder)
,或者立即(如果没有动画发生)或动画实际完成后调用。 返回值表示动画是否已经成立,以及是否ItemAnimator的runPendingAnimations()
方法应该在下次有机会被调用。 这种机制允许ItemAnimator个别动画作为单独的电话设置为animateAdd()
, animateMove()
, animateRemove()
,并animateChange(ViewHolder, ViewHolder, int, int, int, int)
进来一个接一个,然后到后来的呼叫启动动画一起runPendingAnimations()
。
Parameters | |
---|---|
holder |
RecyclerView.ViewHolder : The item that is being moved. |
fromX |
int
|
fromY |
int
|
toX |
int
|
toY |
int
|
Returns | |
---|---|
boolean |
true if a later call to runPendingAnimations() is requested, false otherwise. |
boolean animateRemove (RecyclerView.ViewHolder holder)
从RecyclerView中删除一个项目时调用。 执行者可以选择是否以及如何动画变化,但是在完成时必须始终调用dispatchRemoveFinished(ViewHolder)
,或者立即(如果没有动画发生)或动画实际完成后调用dispatchRemoveFinished(ViewHolder)
。 返回值指示是否已经设置了动画以及是否应该在下一次调用runPendingAnimations()
方法runPendingAnimations()
方法。 这种机制允许ItemAnimator个别动画作为单独的电话设置为animateAdd()
, animateMove()
, animateRemove()
,并animateChange(ViewHolder, ViewHolder, int, int, int, int)
进来一个接一个,然后到后来的呼叫启动动画一起runPendingAnimations()
。
这种方法也可以用于RecyclerView中继续存在但消失的项目,但系统没有足够的信息将它们设置为不可见。 在这种情况下,移除项目的默认动画也会在这些项目上运行。
Parameters | |
---|---|
holder |
RecyclerView.ViewHolder : The item that is being removed. |
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
。
如果有效载荷列表不是空的,则DefaultItemAnimator返回true
。 在这种情况下:
animateChange(ViewHolder, ViewHolder, int, int, int, int)
, both ViewHolder arguments will be the same instance. animateChange(ViewHolder, ViewHolder, int, int, int, int)
, then DefaultItemAnimator will call animateMove(ViewHolder, int, int, int, int)
and run a move animation instead. 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) . |
void endAnimation (RecyclerView.ViewHolder item)
方法在视图上的动画应该立即结束时调用。 当发生其他事件(如滚动)时,可能会发生这种情况,以便将动画视图快速放入其正确的终点位置。 实现应确保该项目上运行的任何动画都被取消,并且受影响的属性将设置为其最终值。 另外,应该为每个完成的动画调用dispatchAnimationFinished(ViewHolder)
,因为在调用此方法时动画是有效完成的。
Parameters | |
---|---|
item |
RecyclerView.ViewHolder : The item for which an animation should be stopped. |
void endAnimations ()
当所有项目动画应该立即结束时调用该方法。 当发生其他事件(如滚动)时,可能会发生这种情况,以便将动画视图快速放入其正确的终点位置。 实现应确保任何项目上运行的任何动画都被取消,并且受影响的属性将设置为其最终值。 另外,应该为每个完成的动画调用dispatchAnimationFinished(ViewHolder)
,因为在调用此方法时动画是有效完成的。
boolean isRunning ()
返回当前是否有任何项目动画正在运行的方法。 此方法可用于确定是否延迟其他操作直到动画结束。
Returns | |
---|---|
boolean |
true if there are any item animations currently running, false otherwise. |
void runPendingAnimations ()
当有待处理的动画等待启动时调用。 这种状态是由返回值从管辖animateAppearance()
, animateChange()
animatePersistence()
和animateDisappearance()
,该通知RecyclerView的ItemAnimator希望稍后调用来启动相关的动画。 runPendingAnimations()将被安排在下一帧上运行。