RecyclerViewのアイテムをオーバーラップさせることは可能ですか?
LinearLayoutManagerでそれを試しています。
私の要件はLinearLayoutManagerの場合とまったく同じであり、内部のアイテムを上から下にオーバーラップする必要があります。 (トランプのように)
私はListViewを使用して いくつかのバリアント を見てきました。ですから、RecyclerViewでも可能だと思いますが、何度か調べてみると、カスタムレイアウトマネージャーを実装するのにかなりの時間がかかり、これについてかなり理解しているように感じます(Daveの投稿を調べました)について カスタムLayoutManagerの構築 )
そのため、今では、カスタムレイアウトマネージャーのこのような複雑さに対処する代わりに、要件に基づいてListViewバリエーションを使用する必要があるかもしれないと考えています。
ただし、内部のアイテムをオーバーラップさせる必要があります。まだ気づいていない方向性があるのではないかと思います。 上記のListViewバリアント以外およびカスタムレイアウトマネージャーがあるかどうかをお知らせください。
私はまた、ここに私の発見を投稿します。
私はあなたが部分的な重複を探していると思います(例えば、カードのデッキがわずかに扇形に広がっています)。もしそうなら、これはRecyclerViewとカスタムItemDecorationでかなり簡単に見えます。これは、アイテムを垂直方向に90pxオーバーラップする簡単な例です。
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);
}
}
この例ではオフセットをハードコーディングしていますが、リストアイテムの高さが異なる場合は、このためのロジックを測定して追加する必要があります。
レイアウトマネージャーを設定する前に、この装飾をRVに追加してください。 StaggeredGridで試しましたが、LinearLayoutとGridLMでも機能するはずです。
ItemDecoration
のRecyclerView
を使用して達成できます
set ItemDecoration:
var customAdapter = CustomListAdapter()
recyclerView.addItemDecoration(MyItemDecoration()) // here set decoration in recyclerview
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = customAdapter
ItemDecorationクラスを作成します:
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
}
}