在LayoutManager预布局

时间:2016-11-09 15:35:44

标签: java android android-layout android-recyclerview android-animation

当项目从可见屏幕边界移动到可见点时,我想支持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也不支持此类动画。 (只有简单的淡入动画)

1 个答案:

答案 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