我正在尝试实现如下的RecyclerView:
项目是相同类型但具有不同比例的视图。我试过打电话
view.setScaleX(scaleFactor); view.setScaleY(scaleFactor);
在RecycleView适配器的OnBindViewHolder
方法中以及在ItemDecorator中,但每次列表的行为都是意外的。
实现它的最佳方法是什么?可能与其他控件如PagerAdapter或其他。
UPD:缩放系数取决于适配器中项目的位置,滚动时不应更改。
UPD2:以下是我在OnBoundViewHolder中尝试过的代码:
int childCount = recyclerView.getChildCount();
View view = holder.getView();
if (position == childCount){
view.setScaleX(1f);
view.setScaleY(1f);
} else if (position == childCount - 1){
view.setScaleX(0.8f);
view.setScaleY(0.8f);
} else if (position == childCount - 2){
view.setScaleX(0.6f);
view.setScaleY(0.6f);
}
else {
view.setScaleX(0.4f);
view.setScaleY(0.4f);
}
这是结果(滚动时它会改变):
相同的代码,但在ItemDecorator getItemOffsets
:
答案 0 :(得分:0)
问题在于您根据相对于RecyclerView内子项数量
的位置来确定比例请记住,回收者视图永远不会有比目前可见的更多的孩子(+一些额外的增量)。它不是指示您的回收商将显示多少项目的指标。例如,具有1000个项目的回收者将只有大约6-7的子计数,具体取决于每个列表项的大小。
您要做的是将位置与项目计数
进行比较这是一个建议的修复:
int totalItems = getItemCount();
View view = holder.getView();
if (position == totalItems - 1){ // final position will equal total items - 1
view.setScaleX(1f);
view.setScaleY(1f);
} else if (position == totalItems - 2){
view.setScaleX(0.8f);
view.setScaleY(0.8f);
} else if (position == totalItems - 3){
view.setScaleX(0.6f);
view.setScaleY(0.6f);
}
else {
view.setScaleX(0.4f);
view.setScaleY(0.4f);
}
希望这有帮助。