RecyclerView滑動方法,并指定位置在頂部

RecyclerView提供的用于控制移動的常用方法有3個 :

  • smoothScrollToPosition(int)
  • scrollToPosition(int)
  • scrollBy(int x,int y)

1.smoothScrollToPosition

該方法是平滑滾動,是可以看到item在屏幕滾動的狀態(tài)真竖。但是用于RecyclerView大量數(shù)據(jù)不理想捌省,看源碼:

public void smoothScrollToPosition(int position) {
        // ···省略無關(guān)代碼,mLayout是該RecyclerView的LayoutManager對象
        mLayout.smoothScrollToPosition(this, mState, position);
    }

所以實際上是調(diào)用RecyclerView.LayoutManager.smoothScrollToPosition()方法,這是個抽象方法漏益。由于筆者項目中是LinearLayoutManager于是找到其具體實現(xiàn)如下

        @Override
        public void smoothScrollToPosition(RecyclerView recyclerView,
                                           RecyclerView.State state, final int position) {

            LinearSmoothScroller smoothScroller = new LinearSmoothScroller(context);

            smoothScroller.setTargetPosition(position);
            startSmoothScroll(smoothScroller);
        }

生成一個RecyclerView.SmoothScroller的子類LinearSmoothScroller對象smoothScroller违施,接著利用smoothScroller去完成剩下的滑動工作。
看到這里很失望尚蝌,沒看到有效信息迎变,于是進去LinearSmoothScroller看看。重大發(fā)現(xiàn)—里面有一個跟滑動速度相關(guān)的函數(shù):

/**
     * Calculates the scroll speed.
     * 計算滑動速度
     * 返回:滑過1px所需的時間消耗飘言。
     */
    protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
        // MILLISECONDS_PER_INCH是常量衣形,等于20f
        return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
    }

從源碼可以看出smoothScrollToPosition方法滾動每條都需要一定的時間,所以如果滾動的條目太多姿鸿,屏幕會顯示一直在滾動谆吴;

2.scrollToPosition

無滑動效果,這個方法的作用是顯示指定項苛预,就是把你想置頂?shù)捻楋@示出來句狼,但是在屏幕的什么位置是不管的,只要那一項現(xiàn)在看得到了热某,那它就罷工了腻菇!如果需要指定的條目滾動到頂部位置,可以查考如下代碼:

mRecycleview.scrollToPosition(position);
LinearLayoutManager mLayoutManager =  (LinearLayoutManager) mRecycleview.getLayoutManager();
mLayoutManager.scrollToPositionWithOffset(position, 0);

3.scrollBy

這個方法是自己去控制移動的距離昔馋,單位應(yīng)該是像素筹吐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秘遏,隨后出現(xiàn)的幾起案子丘薛,更是在濱河造成了極大的恐慌,老刑警劉巖邦危,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洋侨,死亡現(xiàn)場離奇詭異舍扰,居然都是意外死亡,警方通過查閱死者的電腦和手機希坚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門边苹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吏够,你說我怎么就攤上這事勾给。” “怎么了锅知?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵播急,是天一觀的道長。 經(jīng)常有香客問我售睹,道長桩警,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任昌妹,我火速辦了婚禮捶枢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘飞崖。我一直安慰自己烂叔,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布固歪。 她就那樣靜靜地躺著蒜鸡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牢裳。 梳的紋絲不亂的頭發(fā)上逢防,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音蒲讯,去河邊找鬼忘朝。 笑死,一個胖子當著我的面吹牛判帮,可吹牛的內(nèi)容都是我干的局嘁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼脊另,長吁一口氣:“原來是場噩夢啊……” “哼导狡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起偎痛,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎独郎,沒想到半個月后踩麦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枚赡,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年谓谦,在試婚紗的時候發(fā)現(xiàn)自己被綠了贫橙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡反粥,死狀恐怖卢肃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情才顿,我是刑警寧澤莫湘,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站郑气,受9級特大地震影響幅垮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尾组,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一忙芒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧讳侨,春花似錦呵萨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歹叮,卻和暖如春跑杭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咆耿。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工德谅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萨螺。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓窄做,卻偏偏與公主長得像,于是被迫代替她去往敵國和親慰技。 傳聞我的和親對象是個殘疾皇子椭盏,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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