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