RecyclerView的item滑動居中居頂關(guān)鍵方法calculateDtToFit

實際開發(fā)中很多時候需要recyclerview點擊邊緣的item時有自動滾動到屏幕中間的需求或者二級聯(lián)動中有二級recyclerview的item要居頂?shù)男枰亚W(wǎng)上有很多介紹原理源碼的哗戈,不贅述了门躯,轉(zhuǎn)載需要看源碼執(zhí)行流程點擊查看,最終實現(xiàn)關(guān)鍵是復寫calculateDtToFit這個方法佛致,計算需要執(zhí)行的偏移位置量

居中類型,需要計算item view的中心點滾動方向到指定位置坐標偏移量

斷點下面是橫向居中截圖1-1,手機橫向分辨率1080


image.png

可以看到boxStart是父布局既recyclerview的開始坐標0,

boxEnd是recyclerview的結(jié)束坐標1080辙谜,我們需要的中點坐標既boxStart+(boxEnd-boxStart)/2,這里可能有padding俺榆、margin之類的開始坐標不一定是0,我猜測的装哆,可以自己去調(diào)試罐脊。

viewStart意思點擊的item開始坐標既view的left,viewEnd是item結(jié)束坐標既right,

-而該view的中心點坐標既開始坐標+view寬度的1/2,反正就是那么個意思蜕琴。既viewStart+(viewEnd-viewStart)/2既得該方向中心點位置

上述兩位置相減有正負萍桌,所得結(jié)果既為該item需要偏移滾動的距離。

居頂類型凌简,原理與居中類似上炎,不過不需要計算中心點,直接boxStart-ViewStart

public class CenterLayoutManager extends LinearLayoutManager {
  public CenterLayoutManager(Context context) {
    super(context);
  }

  public CenterLayoutManager(Context context, int orientation, boolean reverseLayout) {
    super(context, orientation, reverseLayout);
  }

  public CenterLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
  }

  @Override
  public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
    RecyclerView.SmoothScroller smoothScroller = new CenterSmoothScroller(recyclerView.getContext());
    smoothScroller.setTargetPosition(position);
    startSmoothScroll(smoothScroller);
  }

  private static class CenterSmoothScroller extends LinearSmoothScroller {

    public CenterSmoothScroller(Context context) {
      super(context);
    }

    @Override
    public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) {
      return (boxStart + (boxEnd - boxStart) / 2) - (viewStart + (viewEnd - viewStart) / 2);
    }

    @Override
    protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
      return 100f / displayMetrics.densityDpi;
    }
  }
}

item點擊事件中

RecyclerView.LayoutManager layoutManager = mView.getColorRcv().getLayoutManager();
            if (layoutManager != null) {
              layoutManager.smoothScrollToPosition(mView.getColorRcv(), new RecyclerView.State(), position);
            }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末号醉,一起剝皮案震驚了整個濱河市反症,隨后出現(xiàn)的幾起案子辛块,更是在濱河造成了極大的恐慌,老刑警劉巖铅碍,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件润绵,死亡現(xiàn)場離奇詭異,居然都是意外死亡胞谈,警方通過查閱死者的電腦和手機尘盼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烦绳,“玉大人卿捎,你說我怎么就攤上這事【睹埽” “怎么了午阵?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長享扔。 經(jīng)常有香客問我底桂,道長,這世上最難降的妖魔是什么惧眠? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任籽懦,我火速辦了婚禮,結(jié)果婚禮上氛魁,老公的妹妹穿的比我還像新娘暮顺。我一直安慰自己,他們只是感情好秀存,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布捶码。 她就那樣靜靜地躺著,像睡著了一般应又。 火紅的嫁衣襯著肌膚如雪宙项。 梳的紋絲不亂的頭發(fā)上乏苦,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天株扛,我揣著相機與錄音,去河邊找鬼汇荐。 笑死洞就,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的掀淘。 我是一名探鬼主播旬蟋,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼革娄!你這毒婦竟也來了倾贰?” 一聲冷哼從身側(cè)響起冕碟,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匆浙,沒想到半個月后安寺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡首尼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年挑庶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片软能。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡迎捺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出查排,到底是詐尸還是另有隱情凳枝,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布跋核,位于F島的核電站范舀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏了罪。R本人自食惡果不足惜锭环,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泊藕。 院中可真熱鬧辅辩,春花似錦、人聲如沸娃圆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讼呢。三九已至撩鹿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悦屏,已是汗流浹背节沦。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留础爬,地道東北人甫贯。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像看蚜,于是被迫代替她去往敵國和親叫搁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容