RecyclerView自動滾動

2021-09-22 08:21:59 字數 1911 閱讀 1411

smoothscrolltoposition()

在使用recyclerview的時候,有一些場景需要recyclerview能自動滑動到指定的item,這種情況可以呼叫recyclerview的以下方法來實現:

scrolltoposition(int position)

smoothscrolltoposition(int position)

這兩個方法傳入需要滑動到的item的position就可以實現跳轉到相應的item,區別是scrolltoposition()會立即跳轉到相應item,不會有滑動的效果,smoothscrolltoposition()跳轉的同時,會有滑動的效果,但是滑動速度很快,使用者體驗效果不好,如何能控制速度達到乙個好的效果呢?

先來看下smoothscrolltoposition()的原始碼:

public void smoothscrolltoposition(int position)

if (mlayout == null)

mlayout.smoothscrolltoposition(this, mstate, position);

}它最終是呼叫了mlayout.smoothscrolltoposition(this, mstate, position),mlayout是recyclerview的布局管理器,比如線性布局管理器linearlayoutmanager:

@override

public void smoothscrolltoposition(recyclerview recyclerview, recyclerview.state state,

int position)

使用的是linearsmoothscroller進行滑動操作,再來看linearsmoothscroller類,它有乙個獲取滑動速度的方法:

protected float calculatespeedperpixel(displaymetrics displaymetrics)

所以我們可以想辦法重寫這個方法來改變recyclerview滑動的速度。

我們自定義乙個linearlayoutmanager:

public class scrolllinearlayoutmanager extends linearlayoutmanager

@override

public void smoothscrolltoposition(recyclerview recyclerview, recyclerview.state state, final int position)

@override

protected float calculatespeedperpixel(displaymetrics displaymetrics)

};linearsmoothscroller.settargetposition(position);

startsmoothscroll(linearsmoothscroller);}}

重寫smoothscrolltoposition()方法,然後重新例項化乙個linearsmoothscroller,並重寫calculatespeedperpixel()方法, 

這樣,可以調整milliseconds_per_inch的值,來實現recyclerview滑動速度的調整。

補充由當前item到目標item的中間要滑動的item數量可能每次都不一樣,這樣固定的移動速度也會導致使用者體驗不好,所以可以根據需要滑動的item數量來動態的調整滑動速度, 

我們再修改下calculatespeedperpixel():

protected float calculatespeedperpixel(displaymetrics displaymetrics)

else

}這樣當需要滑動的item數量越多,滑動速度越快,item數量少時,滑動會較慢,這樣就會有乙個好的使用者體驗。

RecyclerView搶焦點自動滾動

最近有個專案首頁採用的是阿里的vlayout開發的,其中有乙個item是橫向滾動的recyclerview,發現有個比較詭異的現象,當頁面來回切換的時候,列表老是會自動滾動到item是橫向recyclerview處。通過檢視原始碼以及參考網上的分析,原來這就是所謂的recyclerview搶奪焦點現...

iOS uiscrollview 自動迴圈滾動

自動迴圈滾動scrollview和 uipagecontrol 自己的資源 我的是5張 另外設定第一張為 最後一張 最後一張是第一張 把自己的五張 放在這兩張圖之間共七張 設定scrollview 的偏移量為一張的偏移量 nstimer scheduledtimerwithtimeinterval ...

QScrollArea的垂直滾動條自動滾動到最底部

在使用qscrollarea時,有時候需要將滾動條滾動到最新位置,qt本身並沒有提供相應的說明,來如何實現,通過仔細閱讀qt幫助文件,給出了一種比較完美的解決方案。這裡以豎直滾動條為例,來說明如何實現。具體是通過安裝事件過濾器,在resize事件中設定滾動條的最大值以及位置。安裝事件過濾器ui sc...