RecycleView 2 列带水平扩展卡
RecycleView 2 columns with horizontally expandable card
我正在寻找如何使用 recycleview 和布局管理器实现这一点,就像屏幕截图中那样。
具有 2 列的网格(相同大小)。每张卡片都可以通过单击重叠其水平邻居来展开。单击它会恢复到原来的状态。
问题已通过覆盖 RecyclerView.ItemDecoration 解决。
在适配器中,我们在单击时更改项目的 属性 并为单击的卡片及其邻居调用 notifyItemChanged。
然后,我们将 Decorator 附加到 RecylceView(在分配适配器之前)。
gridView = findViewById(R.id.gridview_words_titles);
gridView.addItemDecoration(new OverlapDecoration());
然后,在 OverlapDecoration class 内部之后,我们可以进行重叠卡片所需的所有更改。
在我的例子中,我只是扩展矩形取决于它是成对的还是左的。
View layout = view.findViewById(R.id.layout_words_full);
ViewGroup.LayoutParams params = layout.getLayoutParams();
params.width = (int) (width_px - 15 * scale);
而且,
int horizOverlap;
if (itemPosition % 2 == 0) {
horizOverlap = (int) ((width_px - 20 * scale) / 2);
outRect.set(-horizOverlap, 0, 0, 0);
} else {
horizOverlap = (int) ((width_px - 5 * scale) / 2);
outRect.set(0, 0, -horizOverlap, 0);
}
我正在寻找如何使用 recycleview 和布局管理器实现这一点,就像屏幕截图中那样。
具有 2 列的网格(相同大小)。每张卡片都可以通过单击重叠其水平邻居来展开。单击它会恢复到原来的状态。
问题已通过覆盖 RecyclerView.ItemDecoration 解决。 在适配器中,我们在单击时更改项目的 属性 并为单击的卡片及其邻居调用 notifyItemChanged。
然后,我们将 Decorator 附加到 RecylceView(在分配适配器之前)。
gridView = findViewById(R.id.gridview_words_titles);
gridView.addItemDecoration(new OverlapDecoration());
然后,在 OverlapDecoration class 内部之后,我们可以进行重叠卡片所需的所有更改。 在我的例子中,我只是扩展矩形取决于它是成对的还是左的。
View layout = view.findViewById(R.id.layout_words_full);
ViewGroup.LayoutParams params = layout.getLayoutParams();
params.width = (int) (width_px - 15 * scale);
而且,
int horizOverlap;
if (itemPosition % 2 == 0) {
horizOverlap = (int) ((width_px - 20 * scale) / 2);
outRect.set(-horizOverlap, 0, 0, 0);
} else {
horizOverlap = (int) ((width_px - 5 * scale) / 2);
outRect.set(0, 0, -horizOverlap, 0);
}