RecycleView獲取當前螢幕中itemview的顯示區域
阿新 • • 發佈:2019-01-13
在做專案需求時,遇到一個case,需要計算當前螢幕中所以ziview展示的高度,中間走了很多彎路。
廢話不多說,直接上程式碼
public int getCurrentViewIndex() { int firstVisibleItem = mLineManager.findFirstVisibleItemPosition(); int lastVisibleItem = mLineManager.findLastVisibleItemPosition(); int currentIndex = firstVisibleItem; int lastHeight = 0; for (int i = firstVisibleItem; i <= lastVisibleItem; i++) { View view = mLineManager.getChildAt(i - firstVisibleItem); if (null == view) { continue; } int[] location = new int[2]; view.getLocationOnScreen(location); Rect localRect = new Rect(); view.getLocalVisibleRect(localRect); int showHeight = localRect.bottom - localRect.top; if (showHeight > lastHeight) { currentIndex = i; lastHeight = showHeight; } } if (currentIndex < 0) { currentIndex = 0; } return currentIndex; }
mLineManager是LinearLayoutManager;
findFirstVisibleItemPosition : 可以定位到螢幕中展示第一個item的全域性索引值
findLastVisibleItemPosition: 可以定位到螢幕中展示最後一個item的全域性索引值;
mLineManager.getChildAt(i - firstVisibleItem) :可以獲取當前展示的子view; 開發過程中踩到的坑是利用 mLineManager.getChildAt(firstVisibleItem)來獲取view,結果各種問題;
Recycleview中的子view應該只是快取的幾個view,因此不能夠直接通過position獲取子view。