当项目从可见屏幕边界移动到可见点时,我想支持my custom LayoutManager中的预测动画。
我在onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state)
进行的所有填充操作。
根据支持预先布局阶段预测动画的文档(state.isPreLayout()
),我应该设置更改动画的初始条件(例如,在某处放置视图)
问题是我找不到在预先布局中确定哪些视图将从外部移动的方法,因为我只能使用附加到RecyclerView视图和onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount)
的当前操作方法在预布局阶段后称为。 (例如onItemsRemoved在预布局之前称为)
它是LayoutManager
的错误还是我可能以某种方式
在预先布局中确定哪些视图将很快移动?
PS:我能够将预测动画从可见点维持到外部,因为我能够循环显示可见视图并确定recycler.convertPreLayoutPositionToPostLayout
将要移动哪些视图。
//childViews is an iterable over RecyclerView items
for (View view : childViews) {
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams();
boolean probablyMovedFromScreen = false;
if (!lp.isItemRemoved()) {
//view won't be removed, but maybe it is moved offscreen
int pos = lp.getViewLayoutPosition();
//start view is a first visible view on screen
int lowestPosition = getPosition(startView);
int highestPosition = getPosition(endView);
pos = recycler.convertPreLayoutPositionToPostLayout(pos);
probablyMovedFromScreen = pos < lowestPosition || pos > highestPosition;
}
if (probablyMovedFromScreen) {
//okay this view is going to be moved
}
}
This article给了我很多帮助,但它也没有描述我需要的动画。
PPS:LinearLayoutManager也不支持此类动画。 (只有简单的淡入动画)
答案 0 :(得分:3)
您不知道哪些项目可见,但您知道哪些项目会消失(或更改),因此您可以估算出在哪个方向上需要多少空间。您可以检查LinearLayoutManager的代码以查看其工作原理。 您还可以阅读这些有关RecyclerView系统详细信息的文章。
http://www.birbit.com/recyclerview-animations-part-1-how-animations-work http://www.birbit.com/recyclerview-animations-part-2-behind-the-scenes