摘要:框架下拉刷新控件還能框架化智能又怎么回事二話不多少先上效果圖,咱們?cè)賮硖絺€(gè)究竟。下面通過自定義和嵌套作為內(nèi)容來解釋的智能之處。可以看到在列表已經(jīng)滾動(dòng)到中部時(shí),輕微下拉列表是不會(huì)觸發(fā)刷新的,但是如果是觸摸固定的布局,則可以觸發(fā)下拉。
框架?下拉刷新控件還能框架化?智能又怎么回事?二話不多少先上Demo效果圖,咱們?cè)賮硖絺€(gè)究竟。
Github 傳送門
注意:本文僅僅是博客文章,主要用于項(xiàng)目介紹和宣傳,由于發(fā)布時(shí)間關(guān)系,部分內(nèi)容已經(jīng)過期,詳細(xì)使用文檔請(qǐng)?zhí)D(zhuǎn) github
下載 APK-Demo
如果手機(jī)上看不到圖片,可以嘗試
點(diǎn)擊瀏覽器查看
點(diǎn)擊Github傳送門
使用電腦瀏覽
項(xiàng)目演示 風(fēng)格演示 框架如果你看完了效果圖,或許框架的意思應(yīng)該有所了解了~~SmartRefreshLayout對(duì)下拉刷新功能進(jìn)行系統(tǒng)的拆分、組合,主要由四個(gè)部分組成:
RefreshLayout 下拉的基本功能,包括布局測(cè)量、滑動(dòng)事件處理、參數(shù)設(shè)定等等
RefreshContent 對(duì)不同內(nèi)容的統(tǒng)一封裝,包括判斷是否可滾動(dòng)、回彈判斷、智能識(shí)別
RefreshHeader 下拉頭部的實(shí)現(xiàn)和顯示
RefreshFooter 上拉底部的實(shí)現(xiàn)和顯示
下面是UML關(guān)系類圖
通過SmartRefreshLayout框架,你可以在一個(gè)穩(wěn)定強(qiáng)大的下拉布局中實(shí)現(xiàn)自己項(xiàng)目需求的 Header ,不用去關(guān)心滑動(dòng)事件處理,不用關(guān)心子控件的回彈和滾動(dòng)邊界,只需關(guān)注自己真正的項(xiàng)目需求Header的樣子和動(dòng)畫。
特點(diǎn)這時(shí)你會(huì)問:網(wǎng)上其他的開源下拉控件一樣的可以自定義 Header 和 Footer ,SmartRefreshLayout 和它們比起來有什么優(yōu)勢(shì)?
變換方式Translate 平行移動(dòng) 特點(diǎn): 最常見,HeaderView高度不會(huì)改變,
Scale 拉伸形變 特點(diǎn):在下拉和上彈(HeaderView高度改變)時(shí)候,會(huì)自動(dòng)觸發(fā)OnDraw事件
FixedFront 固定在前面 特點(diǎn):不會(huì)上下移動(dòng),HeaderView高度不會(huì)改變
FixedBehind 固定在后面 特點(diǎn):不會(huì)上下移動(dòng),HeaderView高度不會(huì)改變(類似微信瀏覽器效果)
Screen 全屏幕 特點(diǎn):固定在前面,尺寸充滿整個(gè)布局
SmartRefreshLayout 的Header和Footer都有多種變換方式,適應(yīng)不同風(fēng)格的 Header 和 Footer,下面是不同變換方式Header的Demo
FixedBehind 固定在后面 和 Scale 拉伸形變
Screen 全屏幕 和 Translate 平行移動(dòng)
獨(dú)立事件Header和Footer 可以獨(dú)立的處理手指滑動(dòng)事件來為動(dòng)畫提供操作指令,也可以使用RefreshLayout的核心接口來完成一些不尋常的操作指令。
下面的打磚塊 Header中 ,Header可以獨(dú)立的使用滑動(dòng)事件來為游戲擋板提供指令,并同時(shí)可以調(diào)用核心接口來通知RefreshLayout上下滾動(dòng)列表
智能是什么玩意?有什么用?智能主要體現(xiàn) SmartRefreshLayout 對(duì)未知布局的自動(dòng)識(shí)別上,這樣可以讓我們更高效的實(shí)現(xiàn)我們所需的功能,也可以實(shí)現(xiàn)一些非尋常的功能。下面通過自定義Header 和 嵌套Layout作為內(nèi)容 來解釋 SmartRefreshLayout 的智能之處。
自定義Header我們來看這一下這個(gè)偽代碼例子:
在Android Studio 中的預(yù)覽效果圖
對(duì)比代碼和我們預(yù)想的一樣,那我們來對(duì)代碼做一些改動(dòng),ClassicsHeader換成一個(gè)簡(jiǎn)單的TextView,看看會(huì)發(fā)生什么?
在Android Studio 中的預(yù)覽效果圖 和 運(yùn)行效果圖
這時(shí)發(fā)現(xiàn)我們我們替換的 TextView 自動(dòng)就變成了Header,只是它還不會(huì)動(dòng)。要?jiǎng)悠饋恚磕敲刺?jiǎn)單啦,網(wǎng)上隨便一搜索就一大堆的 gif 。如這里:拖拖拖 ~~垃機(jī)C4D,類似的我們還可以找到很多,又如:環(huán)游東京30天:GIF版旅行指南
那我們就選擇 環(huán)游東京30天:GIF版旅行指南 中的這張:
接著我們來改代碼:
compile "pl.droidsonroids.gif:android-gif-drawable:1.2.3"http://一個(gè)開源gif控件
在 Android Studio 中的預(yù)覽效果圖 和 運(yùn)行效果圖
哈哈!一行Java代碼都不用寫,就完成了一個(gè)自定義的Header
嵌套Layout作為內(nèi)容如果boos要求在列表的前面固定一個(gè)廣告條怎么辦?這好辦呀,一般我們會(huì)開開心心的下下這樣的代碼:
但是在運(yùn)行下拉刷新的時(shí)候,我們發(fā)現(xiàn) Header是在廣告條之下的,看著會(huì)別扭~,其實(shí)我們可以試試另一種方式,把廣告條寫到 RefreshLayout內(nèi)部,看看會(huì)發(fā)生什么?
由于偽代碼過于簡(jiǎn)單,而且運(yùn)行效果過于丑陋,這里還是貼出在實(shí)際項(xiàng)目中的實(shí)際情況吧~
我們注意看右邊的圖,仔細(xì)觀察手指觸摸的位置和下拉效果。可以看到在列表已經(jīng)滾動(dòng)到中部時(shí),輕微下拉列表是不會(huì)觸發(fā)刷新的,但是如果是觸摸固定的布局,則可以觸發(fā)下拉。從這里可以看出 SmartRefreshLayout 對(duì)滾動(dòng)邊界的判斷是動(dòng)態(tài)的,智能的!當(dāng)然如果 SmartRefreshLayout 的智能還是不能滿足你,可以通過 setListener 自己實(shí)現(xiàn)滾動(dòng)邊界的判斷,更為準(zhǔn)確!
功能簡(jiǎn)單的介紹了兩大特點(diǎn)框架和智能,接下來也說說SmartRefreshLayout還具有的其他常用功能吧~
支持所有的 View(AbsListView、RecyclerView、WebView....View) 和多層嵌套的 Layout
支持自定義并且已經(jīng)集成了很多炫酷的 Header 和 Footer
支持和ListView的同步滾動(dòng) 和 RecyclerView、AppBarLayout、CoordinatorLayout 的嵌套滾動(dòng) NestedScrolling.
支持在Android Studio Xml 編輯器中預(yù)覽 效果
支持分別在 Default(默認(rèn))、Xml、JavaCode 等三個(gè)地方設(shè)置 Header 和 Footer.
支持自動(dòng)刷新、自動(dòng)上拉加載(自動(dòng)檢測(cè)列表滾動(dòng)到底部,而不用手動(dòng)上拉).
支持通用的刷新監(jiān)聽器 OnRefreshListener 和更詳細(xì)的滾動(dòng)監(jiān)聽 OnMultiPurposeListener.
支持自定義回彈動(dòng)畫的插值器,實(shí)現(xiàn)各種炫酷的動(dòng)畫效果.
支持設(shè)置主題來適配任何場(chǎng)景的App,不會(huì)出現(xiàn)炫酷但很尷尬的情況.
支持設(shè)置多種滑動(dòng)方式來適配各種效果的Header和Footer:位置平移、尺寸拉伸、背后固定、頂層固定、全屏
支持內(nèi)容尺寸自適應(yīng) Content-wrap_content
支持繼承重寫和擴(kuò)展功能,內(nèi)部實(shí)現(xiàn)沒有 private 方法和字段,繼承之后都可以重寫覆蓋
支持越界回彈(Listview、RecyclerView、ScrollView、WebView...View)
使用 簡(jiǎn)單用例 1.在 buld.gradle 中添加依賴compile "com.android.support:appcompat-v7:25.3.1"http://版本隨意 compile "com.scwang.smartrefresh:SmartRefreshLayout:1.0.4" compile "com.scwang.smartrefresh:SmartRefreshHeader:1.0.4"http://沒有使用特殊Header,可以不加這行2.在XML布局文件中添加 SmartRefreshLayout
3.在 Activity 或者 Fragment 中添加代碼
RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout); refreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh(RefreshLayout refreshlayout) { refreshlayout.finishRefresh(2000); } }); refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() { @Override public void onLoadmore(RefreshLayout refreshlayout) { refreshlayout.finishLoadmore(2000); } });使用指定的 Header 和 Footer 1.方法一 全局設(shè)置
public class App extends Application { static {//static 代碼段可以防止內(nèi)存泄露 //設(shè)置全局的Header構(gòu)建器 SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() { @Override public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) { layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局設(shè)置主題顏色 return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);//指定為經(jīng)典Header,默認(rèn)是 貝塞爾雷達(dá)Header } }); //設(shè)置全局的Footer構(gòu)建器 SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() { @Override public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) { //指定為經(jīng)典Footer,默認(rèn)是 BallPulseFooter return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Translate); } }); } }
注意:方法一 設(shè)置的Header和Footer的優(yōu)先級(jí)是最低的,如果同時(shí)還使用了方法二、三,將會(huì)被其他方法取代
2.方法二 XML布局文件指定注意:方法二 XML設(shè)置的Header和Footer的優(yōu)先級(jí)是中等的,會(huì)被方法三覆蓋。而且使用本方法的時(shí)候,Android Studio 會(huì)有預(yù)覽效果,如下圖:
不過不用擔(dān)心,只是預(yù)覽效果,運(yùn)行的時(shí)候只有下拉才會(huì)出現(xiàn)~
3.方法三 Java代碼設(shè)置final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.smartLayout); //設(shè)置 Header 為 Material風(fēng)格 refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true)); //設(shè)置 Footer 為 球脈沖 refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67298.html
摘要:在區(qū)有不少人建議讓支持橫向刷新。但這在引發(fā)熱議,可能是那些橫向刷新庫的使用功能擴(kuò)展與有很大差距。所以我自己認(rèn)為要做橫向刷新庫也需要能夠像一樣的多功能與易擴(kuò)展。所以一開始的時(shí)候我?guī)缀鯖]有開發(fā)橫向刷新功能的想法。 距離上次發(fā)文又過了一年,這次我給大家?guī)砹肆硪粋€(gè)開源庫 SmartRefreshHorizontal,下面先看看效果: 傳送門 項(xiàng)目地址 屬性文檔 常見問題 更新日志 源碼下載...
摘要:萬能適配器下拉刷新無感分頁更新完善更多下拉刷新場(chǎng)景增加上拉分頁加載和無感分頁加載更新增加超強(qiáng)功能的下拉刷新更新增加對(duì)團(tuán)隊(duì)開發(fā)的支持增加對(duì)混合列表的支持簡(jiǎn)介非約束列表,也是很多同學(xué)口中的萬能適配器,近期增加了下拉刷新和無感分頁。 萬能適配器 + 下拉刷新 + 無感分頁 v3.1更新 完善更多下拉刷新場(chǎng)景 增加【上拉分頁加載】和【無感分頁加載】 v3.0更新 增加超強(qiáng)功能的下拉刷新 v...
閱讀 1040·2021-11-22 13:53
閱讀 1594·2021-11-17 09:33
閱讀 2396·2021-10-14 09:43
閱讀 2855·2021-09-01 11:41
閱讀 2275·2021-09-01 10:44
閱讀 2916·2021-08-31 09:39
閱讀 1453·2019-08-30 15:44
閱讀 1864·2019-08-30 13:02