項目有一個界面是這樣的
看到後第一眼覺得應該使用RecyclerView,首先這個列表是item疊放效果,下面的壓住了上面的一部分,而且item背景圖片四周都有些透明陰影,不能簡簡單單的重定item高度解決,當然得需要很有私人訂製範的RecyclerView了,要不就去找找有用的API方法,要不就是自定義LayoutManager。
- 很高興,RecyclerView的一個方法能夠解決這種效果,就是addItemDecoration方法;
一般我們都這樣用
mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.bottom = 10;
}
});
能夠使RecyclerView有一個10像素的透明分割線。
那如果這個值是負數呢?很幸運,這樣能達到我們想要的重疊效果:
很明顯實現了我們想要的效果,但最後一個的item也被擋了,說明每一個item的下面都有一個分割線,因爲outRect.bottom = 10爲正值時也能看到:
很明顯滾動到最後一條時,底部有一個透明分割線。
那如何讓RecyclerView的最後一個item不顯示呢?還是剛纔的代碼,加一句判斷就行了:
mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if (parent.getChildPosition(view) != (mlist.size() - 1)) {
outRect.bottom = -100;
}
}
});
parent.getChildPosition(view)能夠獲取item的View在parent中的索引,只要它不是最後一個就添加分割線高度,雖然方法已過時,但仍然完美的解決了問題。
注:Demo是隨便寫的,負值的多少還是需要根據Ui設計來計算。