Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在LinearLayoutManager-RecyclerView中重叠项目(如堆叠卡片)_Android_Listview_Android Recyclerview - Fatal编程技术网

Android 如何在LinearLayoutManager-RecyclerView中重叠项目(如堆叠卡片)

Android 如何在LinearLayoutManager-RecyclerView中重叠项目(如堆叠卡片),android,listview,android-recyclerview,Android,Listview,Android Recyclerview,这是否可能与RecyclerView中的项目重叠? 我正在与LinearLayoutManager一起尝试这一点。 我的要求与LinearLayoutManager中的要求相同,我只需要从上到下重叠内部的项目。(像叠卡片) 我已经通过使用ListView看到了。所以,我想会的 在RecyclerView中也是可能的但是经过一段时间的探索, 我觉得实现一个定制需要相当长的时间 布局经理对此有相当程度的了解。(我看了 进入Dave关于的帖子) 所以,现在我想我可能只需要根据我的需求使用ListVie


这是否可能与RecyclerView中的项目重叠?
我正在与LinearLayoutManager一起尝试这一点。
我的要求与LinearLayoutManager中的要求相同,我只需要从上到下重叠内部的项目。(像叠卡片)

我已经通过使用ListView看到了。所以,我想会的 在RecyclerView中也是可能的但是经过一段时间的探索, 我觉得实现一个定制需要相当长的时间 布局经理对此有相当程度的了解。(我看了 进入Dave关于的帖子)

所以,现在我想我可能只需要根据我的需求使用ListView变体,而不是处理如此复杂的定制布局管理器

但是,我只需要让里面的项目重叠。我觉得可能还有其他我还没有意识到的方向。请告诉我除了上面的ListView变量和自定义布局管理器之外是否还有任何

我也会把我的发现贴在下面


我假设您正在寻找部分重叠(例如,一副略微呈扇形展开的牌)。如果是这样的话,使用RecyclerView和定制ItemDecoration似乎相当简单。下面是一个简单的示例,其中项目垂直重叠90像素:

public class OverlapDecoration extends RecyclerView.ItemDecoration {

  private final static int vertOverlap = -90;

  @Override
  public void getItemOffsets (Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

    outRect.set(0, vertOverlap, 0, 0);

  }
}
本例对偏移量进行硬编码,但如果列表项的高度不同,则需要测量并添加相应的逻辑


在设置layoutmanager之前,将此装饰添加到RV。我已经用交错网格试过了,但它也应该与线性布局和网格LM一起使用。

您可以使用
回收视图的
项目装饰
实现
设置项目装饰:

var customAdapter = CustomListAdapter()
recyclerView.addItemDecoration(MyItemDecoration()) // here set decoration in recyclerview
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = customAdapter
class MyItemDecoration : RecyclerView.ItemDecoration() {

    private val overlapValue = -60

    override fun getItemOffsets(outRect : Rect, view : View, parent : RecyclerView, state : RecyclerView.State) {
        outRect.set(0, 0, 0, overlapValue)  // args is : left,top,right,bottom
    }
}
创建项目装饰类:

var customAdapter = CustomListAdapter()
recyclerView.addItemDecoration(MyItemDecoration()) // here set decoration in recyclerview
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = customAdapter
class MyItemDecoration : RecyclerView.ItemDecoration() {

    private val overlapValue = -60

    override fun getItemOffsets(outRect : Rect, view : View, parent : RecyclerView, state : RecyclerView.State) {
        outRect.set(0, 0, 0, overlapValue)  // args is : left,top,right,bottom
    }
}

它有一个奇怪的行为,只显示可以完全绘制的项目。它不会显示下一个项目的顶部在最底部的下面。我知道这个答案可能不适合所有人,但我不理解否决票。它确实有效,即使如shiami所说,它没有显示下面项目的顶部。这仍然是所有人对这个9个月前的问题提供的唯一答案,也是唯一不需要自定义布局管理器的建议方法。对于那些想知道如何避免顶部项目的人,请尝试以下操作:
final int itemPosition=parent.getChildAdapterPosition(view);if(itemPosition==RecyclerView.NO_POSITION){return;}
获取视图的位置。跳过顶部项目的
outRect.set()
行。完美,正是我想要的,而不是堆叠第一个项目<代码>int itemPosition=parent.getChildAdapterPosition(视图);如果(itemPosition!=0){outRect.set(yoursoffset,0,0,0);}
也许你可以利用这个项目?