RecyclerView已經(jīng)寫(xiě)過(guò)兩篇文章了,分別是Android 5.X新特性之RecyclerView基本解析及無(wú)限復(fù)用 和 Android 5.X新特性之為RecyclerView添加HeaderView和FooterView,既然來(lái)到這里還沒(méi)學(xué)習(xí)的,先去學(xué)習(xí)下吧。
今天我們的主題是學(xué)習(xí)為RecyclerView添加下拉刷新和上拉加載功能。
首先,我們先來(lái)學(xué)習(xí)下拉刷新,google公司已經(jīng)為我們提供的一個(gè)很好的包裝類(lèi),那就是SwipeRefreshLayout,這個(gè)類(lèi)可以支持我們向下滑動(dòng)并進(jìn)行監(jiān)聽(tīng)。那么我們先了解一些基本知識(shí),然后再?gòu)脑创a的角度來(lái)解析它。
A. SwipeRefreshLayout 是一個(gè)容器,直接繼承于ViewGroup。
從其源碼中我們可以直接看出,它是直接繼承于ViewGroup的,所以它是一個(gè)容器,既然是一個(gè)容器,那么我們就可以向其中添加View。
B. SwipeRefreshLayout 封裝了一些列的方法供我們使用,其中較常用的包括以下幾個(gè)。
1. setColorSchemeResources: 刷新時(shí)動(dòng)畫(huà)的顏色,可以設(shè)置4個(gè) 2. setProgressBackgroundColorSchemeResource: 設(shè)置刷新時(shí)進(jìn)度圓環(huán)的背景顏色 3. setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener): 設(shè)置手勢(shì)滑動(dòng)監(jiān)聽(tīng)器。 4. setRefreshing(Boolean refreshing): 設(shè)置組件的刷洗狀態(tài)。 5. setSize(int size):設(shè)置進(jìn)度圈的大小,只有兩個(gè)值:DEFAULT、LARGE
其中最主要的是setOnRefreshListener,它是用來(lái)監(jiān)聽(tīng)我們下拉手勢(shì)的回調(diào)方法。
C. 接下來(lái)我們?cè)購(gòu)脑创a的角度來(lái)了解這個(gè)類(lèi):
SwipeRefreshLayout 是一個(gè)ViewGroup容器,那在向它添加子View的時(shí)候,那首先會(huì)去測(cè)量各個(gè)子View的大小來(lái)確定本身的大小,并且還會(huì)制定子View的坐標(biāo)位置,最后繪制View并顯示出來(lái)。針對(duì)ViewGroup的繪制我之前有寫(xiě)過(guò)一篇博文,大家可以去參考下Android自定義控件之繼承ViewGroup創(chuàng)建新容器(四) ,里面有詳細(xì)的講解。而我們今天所要講解的是從SwipeRefreshLayout 的事件機(jī)制來(lái)說(shuō)起,也更符合我們下拉刷新的主題。
<