滾動(dòng)不起作用
此問題主要是獲取scrollBy滾動(dòng)位置不確定州弟,如果在屏幕之上可正常獲取朽色,如果在屏幕之外就出現(xiàn)無(wú)法定位問題酱酬。而屏幕之外又分為劃過(guò)的位置和未繪制過(guò)的位置。
根據(jù)此問題總結(jié)解決方法如下
1. 滑動(dòng)代碼如下
private boolean move = false;
private int mIndex = 3;
private void moveToPosition(int index) {
this.mIndex = index;
//獲取當(dāng)前recycleView屏幕可見的第一項(xiàng)和最后一項(xiàng)的Position
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int firstItem = linearLayoutManager.findFirstVisibleItemPosition();
int lastItem = linearLayoutManager.findLastVisibleItemPosition();
//然后區(qū)分情況
if (index <= firstItem) {
//當(dāng)要置頂?shù)捻?xiàng)在當(dāng)前顯示的第一個(gè)項(xiàng)的前面時(shí)
recyclerView.scrollToPosition(index);
move = true;
} else if (index <= lastItem) {
//當(dāng)要置頂?shù)捻?xiàng)已經(jīng)在屏幕上顯示時(shí)仆救,計(jì)算它離屏幕原點(diǎn)的距離
int top = recyclerView.getChildAt(index - firstItem).getTop() - toolbar.getHeight() * 2;
recyclerView.scrollBy(0, top);
} else {
//當(dāng)要置頂?shù)捻?xiàng)在當(dāng)前顯示的最后一項(xiàng)的后面時(shí)
recyclerView.scrollToPosition(index);
//記錄當(dāng)前需要在RecyclerView滾動(dòng)監(jiān)聽里面繼續(xù)第二次滾動(dòng)
move = true;
}
}
- 其中抒和,toolbar.getHeight() * 2為上部toolbar和filterview位置,需要空出來(lái)
- 二次滾動(dòng)會(huì)在RecyclerView的onScroll方法進(jìn)行
2. 二次滾動(dòng)代碼如下
//在這里進(jìn)行第二次滾動(dòng)(最后的距離)
if (move) {
move = false;
//獲取要置頂?shù)捻?xiàng)在當(dāng)前屏幕的位置彤蔽,mIndex是記錄的要置頂項(xiàng)在RecyclerView中的位置
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int n = mIndex - linearLayoutManager.findFirstVisibleItemPosition();
if (0 <= n && n < recyclerView.getChildCount()) {
//獲取要置頂?shù)捻?xiàng)頂部離RecyclerView頂部的距離
int top = recyclerView.getChildAt(n).getTop() - toolbar.getHeight() * 2;
//最后的移動(dòng)
recyclerView.scrollBy(0, top);
} else if (n < 0) {
linearLayoutManager.scrollToPositionWithOffset(mIndex, toolbar.getHeight() * 2);
}
}
- 在RecyclerView的addOnScrollListener監(jiān)聽中摧莽,onScrolled回調(diào)方法加上此段代碼,進(jìn)行二次滾動(dòng)顿痪,完美解決镊辕。
- 其中l(wèi)inearLayoutManager.scrollToPositionWithOffset()滾動(dòng)解決不在屏幕的item滾動(dòng)位置問題
- 已驗(yàn)證scrollToPosition如果不在屏幕滾動(dòng)是不起作用的。
- 參考網(wǎng)絡(luò)文章點(diǎn)擊這里進(jìn)入