国产一区二区美女诱惑_国产精品免费播放_91精品国产综合久久香蕉麻豆 _久久精品30_久久综合88_国产精品亚洲成人_黑人极品videos精品欧美裸_亚洲色图欧美激情

原創生活

國內 商業 滾動

基金 金融 股票

期貨金融

科技 行業 房產

銀行 公司 消費

生活滾動

保險 海外 觀察

財經 生活 期貨

當前位置:滾動 >

輕松實現RecyclerView懸浮條,就是如此簡單!

文章來源:財金網  發布時間: 2019-04-23 10:38:51  責任編輯:cfenews.com
+|-

【原標題:輕松實現RecyclerView懸浮條,就是如此簡單!】財金網消息 在我們在刷Instagram的動態時,你是否注意到這樣一個小小的動效,就是當一條動態(以卡片形式呈現)向上滑動時,動態卡片的頭部會始終懸浮在列表最上方,直到下一張動態卡片的頭部將它頂掉并替換它懸浮著。言語可能說不清楚,就直接來看一下它的效果好了。

綜合我上面的文字描述加上這張Gif圖,我想大家應該知道這是個什么樣的效果了吧。那么不廢話了,接下來我就來說說一種很簡單的實現方法吧。

思路

雖然實現起來炒雞簡單,但還是花了我一個多小時的時間思考實現。先說說思考過程吧,那天中午,Instagram給我推了一條消息(哈,就是我最喜歡的偶像金泰妍更新了Ins),于是我就點進去看了,喜歡了之后就開始研究這個效果,我反復地上下滑這個列表,因為Ins的列表有滾動條,我就發現每次滾動條在那個懸浮條附近的時候就會特別短。看到這個現象,敏銳的你是不是察覺到了什么?沒錯,我感覺這個就像是FrameLayout的效果,一個FrameLayout里按順序有列表,懸浮條兩個View,懸浮條覆蓋在列表的上方,它在合適的時機更新自己的位置,在合適的時機更新自己的信息,然后看上去就像是一個懸浮的效果。

接下來我們思考的核心就轉移到了如何確定并找到這個合適的時機。

再仔細觀察上面的Gif圖,我們可以確定當第二個列表項的頭部距離列表頂端一個懸浮條的距離時,懸浮條隨著列表的滑動改變自身的位置,從而看起來像是被頂掉的效果。畫一張簡單位置示意圖

那么,數據更新的時機也很容易確定,就是在懸浮條恰好完全被頂掉的時候,更新自己的數據,并移動到列表頂部。

至于如何找到這個時機會在接下來的實現部分講解。

實現

建立布局

如上面所言,就是一個簡單的FrameLayout。

<FrameLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior">

<android.support.v7.widget.RecyclerView

android:id="@+id/feed_list"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@android:color/white"

android:scrollbars="vertical" />

……

 

 

注意這里FrameLayout的第二個child應該為你列表項要懸浮顯示的布局。

找到時機

根據我們的思路,我們首先要找到第二個列表項的頭部距離列表頂端一個懸浮條的距離時的那個時機,如果我們能找到這個時機,那么第二個時機也相當于找出來了。

這里我們使用的是RecyclerView來實現列表,我們都知道RecyclerView的列表布局是由LayoutManager來確定的,由于一般要實現懸浮條顯示效果的列表一般都為線性列表,即我們一般會使用LinearLayoutManager。通過LinearLayoutManager,我們可以很方便的獲取到RecyclerView中相應位置的View,這里我們需要獲取當前懸浮條數據來源的View和其下一個數據來源的View。這兩個View有什么用呢?懸浮條顯示的信息是來自第一個可見View的,而其下方的View正是第二個列表項,我們可以獲取到它的top值。好了接下來就真的很簡單了,我們只要給RecyclerView加一個ScrollListener,并在相應的回調里做之前我們想好的事就ok了,來看一下代碼

mFeedList.addOnScrollListener(new RecyclerView.OnScrollListener() {

@Override

public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

super.onScrollStateChanged(recyclerView, newState);

mSuspensionHeight = mSuspensionBar.getHeight();

}

@Override

public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

super.onScrolled(recyclerView, dx, dy);

View view = linearLayoutManager.findViewByPosition(mCurrentPosition + 1);

if (view != null) {

if (view.getTop() <= mSuspensionHeight) {

mSuspensionBar.setY(-(mSuspensionHeight - view.getTop()));

} else {

mSuspensionBar.setY(0);

}

}

if (mCurrentPosition != linearLayoutManager.findFirstVisibleItemPosition()) {

mCurrentPosition = linearLayoutManager.findFirstVisibleItemPosition();

mSuspensionBar.setY(0);

updateSuspensionBar();

}

}

});

Tips:其中mCurrentPosition為懸浮條信息來自的那個列表項在RecyclerView的位置。還有這里的ScrollListener可以添加多個,在RecyclerView中會檢查所有的ScrollListener并觸發。

One more thing…

接下來,我們還需要……開玩笑,哪來的One more thing,我們已經完成了?什么?這么快?這么一點代碼?恩,沒錯,就是只要這么一點代碼就好了,我們來看一下最后我們實現的效果(當然最終效果的好壞還是取決與你列表項的布局,比如在Ins里這個效果就很好看呢~)

結語

哈哈,是不是很簡單呢,最后再說一下封裝的事,本來我是想封裝一下的,由于每個人的列表布局都不一樣,數據更新方式也不一樣,就不封裝了,是的,我水平不行,雖然我不想承認~不過代碼真心特別少哦,源碼地址:https://github.com/wuapnjie/SuspensionBar

希望這篇文章可以對你有幫助,我也會繼續努力的。

補充

上面這種情況我們RecyclerView的Item是單一的,但是我們的列表Item通常有很多種,只有在滑到我們想要類型的Item時才需要更新我們的懸浮條信息。比如很常見的通訊錄,在我們滑到從A開頭聯系人滑到B開頭聯系人時,懸浮條的信息才從A變為B;再比如印象筆記的筆記列表,頂部的懸浮條是根據筆記的日期改變的。

那么,遇到這種情況我們應該怎么簡單修改代碼來實現我們需求呢?

其實很簡單,思路已經由上面確定了,只是我們要讓懸浮條移動的時機變化,變得更窄了,同時我們要更新的數據內容也發生了變化(這當然需要我們變換相應的布局)。

mFeedList.addOnScrollListener(new RecyclerView.OnScrollListener() {

@Override

public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

super.onScrollStateChanged(recyclerView, newState);

mSuspensionHeight = mSuspensionBar.getHeight();

}

@Override

public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

super.onScrolled(recyclerView, dx, dy);

//我們只是簡單的收窄了我們讓懸浮條移動的條件,這里就是ItemType必須對應時才發生移動

if (adapter.getItemViewType(mCurrentPosition + 1) == MultiFeedAdapter.TYPE_TIME) {

View view = linearLayoutManager.findViewByPosition(mCurrentPosition + 1);

if (view != null) {

if (view.getTop() <= mSuspensionHeight) {

mSuspensionBar.setY(-(mSuspensionHeight - view.getTop()));

} else {

mSuspensionBar.setY(0);

}

}

}

if (mCurrentPosition != linearLayoutManager.findFirstVisibleItemPosition()) {

mCurrentPosition = linearLayoutManager.findFirstVisibleItemPosition();

mSuspensionBar.setY(0);

updateSuspensionBar();

}

}

});

上面的代碼我們只要注意注釋處,其他的和之前給出的相同。

總之,雖然大家的需求可能不同,但萬變不離其宗。只要掌握了思路,什么需求都不怕。

Github 上已增加相應代碼,最后看一下我們的效果,只在時間變化時才移動懸浮條

專題首頁|財金網首頁

原創
新聞

精彩
互動

獨家
觀察

京ICP備2021034106號-38   營業執照公示信息  財金網  版權所有  cfenews.com  投稿郵箱:362293157@qq.com  業務QQ:362293157立即發帖
97成人在线| 韩国精品一区| 久久一卡二卡| 亚洲精品三区| 久久久影院免费| 免费在线播放第一区高清av| 麻豆精品视频在线观看免费 | 久久国产精品99久久久久久老狼| 欧美aⅴ一区二区三区视频| 久久久久久亚洲综合| 亚洲香肠在线观看| 亚洲成人免费网站| av一区在线观看| 91大神在线观看线路一区| 蜜桃一区二区| 久久综合影视| 国产精品成人在线观看| 在线一区二区视频| 亚洲欧洲第一视频| 久久亚洲导航| 国产探花一区| 国产综合久久久久影院| 亚洲已满18点击进入久久| 欧美videos大乳护士334| 日本aaa在线观看| 欧美美女日韩| 久久精品久久久| eeuss国产一区二区三区| 欧美日韩精品二区| 一本色道久久加勒比88综合| 2020国产在线| 99欧美视频| 不卡免费追剧大全电视剧网站| 欧美视频在线观看免费| 黄页网址在线观看| 亚洲欧洲高清| 日韩一区二区免费看| 国产精品美女久久久久久久网站| 日韩视频一区二区在线观看| 91在线品视觉盛宴免费| 国产欧美三级电影| 国产尤物一区二区| 福利一区福利二区微拍刺激| 美女永久在线网站| 国产美女久久| 日韩主播视频在线| 日韩欧美国产一区二区| 青青九九免费视频在线| 欧美成人精品午夜一区二区| 天堂蜜桃一区二区三区| 欧美午夜久久久| 国产人成在线视频| 国内精品久久久久久99蜜桃| 91久色porny| 国产婷婷97碰碰久久人人蜜臀| 国模私拍一区二区国模曼安| 午夜精品网站| 成人免费一区二区三区视频| 成r视频免费观看在线播放| 国产精品美女久久久久| 国内精品视频666| 欧美日韩一区二区在线视频| 黄网页免费在线观看| 日韩精品首页| 一区在线中文字幕| 国产超碰在线观看| 国产精品久久久久av蜜臀| 国产精品中文字幕日韩精品 | 免费在线观看精品| 婷婷开心激情综合| 国产素人视频在线观看| 欧美精品aa| 精品女同一区二区三区在线播放| 超碰国产在线观看| 亚洲精品网址| 色综合久久中文综合久久牛| 羞羞电影在线观看www| 国产欧美91| 精品视频一区三区九区| 涩涩网在线视频| 国产综合色视频| 日韩av网址在线观看| 欧美电影在线观看网站| 成人激情小说网站| 秋霞福利视频| 日韩伦理一区| 午夜精品久久久| heyzo高清中文字幕在线| 日韩电影在线免费观看| 精品国产亚洲在线| 51亚洲精品| 亚洲视频 欧洲视频| 幼a在线观看| 久久精品午夜| 日韩电影免费观看在线观看| 久久1电影院| 亚洲国产综合视频在线观看| 欧美性受ⅹ╳╳╳黑人a性爽| 视频一区中文字幕国产| 精品乱人伦一区二区三区| 国产区精品视频在线观看豆花| 国产精品免费观看视频| 国产精品久久久久久福利| 日本不卡视频在线| 亚洲欧美变态国产另类| 欧美日韩一二| 欧美日韩一区精品| 在线视频亚洲欧美中文| 亚洲乱码国产乱码精品精可以看| a篇片在线观看网站| 国产美女娇喘av呻吟久久| 中文字幕免费在线| 国产精品免费看| www.xxx黄| 亚洲精品孕妇| 激情六月丁香| 亚洲精品九九| 高清av影院| 香蕉久久夜色精品国产| 国产福利图片| 视频在线观看91| 欧美捆绑视频| 国产精品99久久久| 色老头视频在线观看| 国产一区二区在线观看免费| 国产福利在线| 99精品国产一区二区三区不卡| 国产婷婷视频在线 | 午夜精品视频一区二区三区在线看| 欧美日韩国产经典色站一区二区三区| 日本精品国产| 亚洲国产精品视频| 午夜伦理在线| 成人一区二区三区| 黄色视屏网站在线免费观看| 久久精品国产68国产精品亚洲| 精品美女一区二区| 午夜欧美精品| 好紧好硬好湿我太爽了| 99pao成人国产永久免费视频| 香蕉视频在线观看免费| 日韩精品久久理论片| 伊人国产在线| 国产精品亚洲а∨天堂免在线| 激情视频在线观看| 国产日本欧美一区二区| hd国产人妖ts另类视频| 国产精品久久三| 粉嫩av一区二区三区四区五区| 欧美性黄网官网| 一区二区美女| 欧美精品一区二区三区一线天视频| 综合久久99| 视频一区二区在线播放| 国产91对白在线观看九色| 国产白丝在线观看| 亚洲伊人色欲综合网| 欧美一区 二区| 亚洲成av人片在线观看香蕉| 亚洲国产裸拍裸体视频在线观看乱了中文 | 99久久精品国产毛片| av资源一区| 五月激情综合婷婷| 欧美精品一区二区三区精品| 亚洲欧洲偷拍精品| 亚洲美洲欧洲综合国产一区| 免费观看成年在线视频网站| 91麻豆免费看| 亚洲国产aⅴ精品一区二区| 91精品国产综合久久精品app | 一区二区三区色| 日韩免费精品| 精品国产免费人成电影在线观看四季 | 日韩一区二区三免费高清在线观看| 亚洲成av人在线观看| 日韩三级在线| 天天干狠狠干| 亚洲国产精品激情在线观看| 极品束缚调教一区二区网站 | 亚洲男男av| 精品香蕉一区二区三区| 国产福利一区二区三区视频| 欧美电影免费观看高清完整| 欧美怡红院视频| 国产精品s色| 国产色播av在线| 欧美丝袜第一区| 欧美三级网页| 黄色网址在线免费播放| 欧美亚洲自拍偷拍| 免费欧美日韩| 亚洲www.| 日韩欧美国产一区二区三区| 国产精品资源站在线| 国产精区一区二区| 亚洲免费成人av电影| 91亚洲永久精品| 欧美疯狂party性派对| 91网页在线观看| 日本精品一级二级|