当前位置: 首页 > 知识库问答 >
问题:

确定LayoutManager预布局中出现的视图

易阳云
2023-03-14

我想在我的自定义布局管理器中支持当项目从可见屏幕边界之外移动到可见点时的预测动画。

我在layoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state)中执行的所有填充操作。

根据在预布局阶段支持预测动画的留档(state.isPreLayout()),我应该设置更改动画的初始条件(例如,在某处出现视图)

问题是,我找不到一种方法来确定预布局中哪些视图将从外部移动,因为我只能在当前附加到RecyclView视图和onItemsMove(RecyclView回收器视图,int from, int to, int itemCount)方法在预布局阶段之后调用。(例如,onItemsRemve在预布局之前被调用)

是因为<code>LayoutManager</code>的错误,还是我可以在预布局中确定哪些视图将很快被移动?

PS:我能够保持从可见点到外部的预测动画,因为我能够在可见视图中循环,并使用<code>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
    }

}

这篇文章对我帮助很大,但它也没有描述我需要的动画。

PPS:LinearLayoutManager也不支持此类动画。(只有简单的淡入动画。)

共有1个答案

龙博
2023-03-14

您不知道哪些项目将可见,但您知道哪些项目将消失(或更改),因此在此基础上,您可以估计在哪个方向上需要多少空间。您可以检查LinearLayoutManager的代码以了解它是如何工作的。您还可以阅读这些关于RecyclView系统详细信息的文章。

http://www . birbit . com/recycler view-animations-part-1-how-animations-work http://www . birbit . com/recycler view-animations-part-2-幕后

 类似资料:
  • 最好的方法是什么?

  • 我有这个布局。 但问题是,ExpandableListView总是以屏幕为中心,尽管父布局中有重力。我想要的是让它从ListView结束的地方开始。知道是什么原因吗?我应该使用滚动视图而不是线性布局吗? 我希望可扩展的listview出现在listview下方。

  • 我有一个片段,我想在其中使用折叠工具栏布局 当collapsing_toolbar展开时,我希望显示图像,当折叠时,我希望只有@id/custom_layout。custom_layout是一个带有文本视图和图像视图的相对布局。 我想要有完全相同的行为,就像我有以下行为一样: 而不是自定义布局。 为什么这是不工作?即使折叠ToobarLayout扩展我看到的ImageView和自定义布局。 !!注

  • 问题内容: 我必须在Android中构建更复杂的自定义视图。最终布局应如下所示: 但是,我只想在XML文件中定义它(不定义SomeView,SomeOtherView等): 这在Android中可行吗?如果可以,那么最干净的方法是什么?我想到的可能解决方案是“重写addView()方法”和“删除所有视图并在以后再次添加它们”,但是我不确定该走哪条路… 在此先感谢您的帮助!:) 问题答案: 绝对有可

  • 我知道有几个类似的主题,但我读了并尝试了其中的大部分,但仍然不知道如何做到这一点。 我写了一个组件在Joomla 2.5和它的工作到目前为止。我有不同的视图,我可以使用controller.php.其中一个视图显示了我的数据库(关于团队的数据)中的一个表。 现在我想有另一个相同视图的布局,它将数据基表显示为表单,以便可以更改内容。 这是文件结构: -团队/ ---tmpl/ - - - defau

  • 我正在使用Recolyer视图和GirdLayout管理器创建总线布局 我的问题是间距问题,我正在根据行、列填充数据 我想在第3行和第2列的项目旁边的卧铺座位在第2行第0列,如图所示,我怎样才能移除那个空间,项目应该根据它的上项容纳。 这是回收视图 和座椅布局xml