1. 程式人生 > >RecyclerView.ItemDecoration實現頂部懸浮效果

RecyclerView.ItemDecoration實現頂部懸浮效果

StickyDecoration

專案地址:Gavin-ZYX/StickyDecoration 

更多:作者   提 Bug   

標籤:

 

利用RecyclerView.ItemDecoration實現頂部懸浮效果

效果

支援

  • LinearLayoutManager
  • GridLayoutManager
  • 點選事件
  • 分割線

新增依賴

專案要求: minSdkVersion >= 14. 在你的build.gradle中 :

repositories {
    jcenter()// If not already there
}
dependencies {
    compile 'com.gavin.com.library:stickyDecoration:1.4.11'
}

最新版本 

使用

文字懸浮——StickyDecoration

注意 使用 recyclerView.addItemDecoration()之前,必須先呼叫 recyclerView.setLayoutManager();

程式碼:

GroupListener groupListener = new GroupListener() {
    @Override
    public String getGroupName(int position) {
        //獲取分組名
        return mList.get(position).getProvince();
    }
};
StickyDecoration decoration = StickyDecoration.Builder
        .init(groupListener)
        //重置 span(使用 GridLayoutManager 時必須呼叫)
        //.resetSpan(mRecyclerView, (GridLayoutManager) manager)
        .build();
...
mRecyclerView.setLayoutManager(manager);
//需要在 setLayoutManager()之後呼叫 addItemDecoration()
mRecyclerView.addItemDecoration(decoration);

效果:

LinearLayoutManager

GridLayoutManager

支援的方法:

方法 功能 預設
setGroupBackground 背景色 #48BDFF
setGroupHeight 高度 120px
setGroupTextColor 字型顏色 Color.WHITE
setGroupTextSize 字型大小 50px
setDivideColor 分割線顏色 #CCCCCC
setDivideHeight 分割線高寬度 0
setTextSideMargin 邊距(靠左時為左邊距 靠右時為右邊距) 10
setHeaderCount 頭部 Item 數量(僅 LinearLayoutManager) 0
方法 功能 描述
setOnClickListener 點選事件 設定點選事件,返回當前分組下第一個 item 的 position
resetSpan 重置 使用 GridLayoutManager 時必須呼叫

自定義 View 懸浮——PowerfulStickyDecoration

先建立佈局item_group

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/ll"
      android:orientation="horizontal"
      ...>

    <ImageView
        android:id="@+id/iv"
        .../>

    <TextView
        android:id="@+id/tv"
        .../>
</LinearLayout>

建立PowerfulStickyDecoration,實現自定View懸浮

PowerGroupListener listener = new PowerGroupListener() {
    @Override
    public String getGroupName(int position) {
        return mList.get(position).getProvince();
    }

    @Override
    public View getGroupView(int position) {
        //獲取自定定義的組 View
        View view = getLayoutInflater().inflate(R.layout.item_group, null, false);
        ((TextView) view.findViewById(R.id.tv)).setText(mList.get(position).getProvince());
        return view;
    }
};
PowerfulStickyDecoration decoration = PowerfulStickyDecoration.Builder
        .init(listener)
         //重置 span(注意:使用 GridLayoutManager 時必須呼叫)
        //.resetSpan(mRecyclerView, (GridLayoutManager) manager)
        .build();

  ...
mRecyclerView.addItemDecoration(decoration);

效果:

效果

支援的方法:

方法 功能 預設
setGroupHeight 高度 120px
setGroupBackground 背景色 #48BDFF
setDivideColor 分割線顏色 #CCCCCC
setDivideHeight 分割線高寬度 0
setCacheEnable 是否使用快取 使用快取
setHeaderCount 頭部 Item 數量僅 LinearLayoutManager 0
方法 功能 描述
setOnClickListener 點選事件 設定點選事件,返回當前分組下第一個 item 的 position 以及對應的 viewId
resetSpan 重置 span 使用 GridLayoutManager 時必須呼叫
notifyRedraw 通知重新繪製 使用場景:網路圖片載入後呼叫方法使用)
clearCache 清空快取 在使用快取的情況下,資料改變時需要清理快取

Tips

1、若使用網路圖片時,在圖片載入完成後需要呼叫

decoration.notifyRedraw(mRv, view, position);

2、使用快取時,若資料來源改變,需要呼叫 clearCache 清除資料

3、點選事件穿透問題,參考 demo 中 MyRecyclerView。issue47

更新日誌

----------------------------- 1.4.8 (2018-10-9)----------------------------

  • fix:由於新增 header 導致的一些問題

----------------------------- 1.4.8 (2018-08-26)----------------------------

  • 頂部懸浮欄點選事件穿透問題:提供處理方案

----------------------------- 1.4.7 (2018-08-16)----------------------------

  • fix:資料變化後,佈局未重新整理問題

----------------------------- 1.4.6 (2018-07-29)----------------------------

  • 修改快取方式
  • 加入效能檢測

----------------------------- 1.4.5 (2018-06-17)----------------------------

  • 在 GridLayoutManager 中使用 setHeaderCount 方法導致佈局錯亂問題

----------------------------- 1.4.4 (2018-06-2)----------------------------

  • 新增 setHeaderCount 方法
  • 修改 README
  • 修復 bug

----------------------------- 1.4.3 (2018-05-27)----------------------------

  • 修復一些 bug,更改命名

----------------------------- 1.4.2 (2018-04-2)----------------------------

  • 增強點選事件,現在可以得到懸浮條內 View 點選事件(沒有設定 id 時,返回 View.NO_ID)

  • 修復載入更多返回 null 崩潰或出現多餘的懸浮 Item 問題(把載入更多放在 Item 中的載入方式)

----------------------------- 1.4.1 (2018-03-21)----------------------------

  • 預設取消快取,避免資料改變時顯示出問題

  • 新增 clearCache 方法用於清理快取

----------------------------- 1.4.0 (2018-03-04)----------------------------

  • 支援非同步載入後的重新繪製(如網路圖片載入)

  • 優化快取

  • 優化 GridLayoutManager 的分割線

----------------------------- 1.3.1 (2018-01-30)----------------------------

  • 修改測量方式

----------------------------- 1.3.0 (2018-01-28)----------------------------

  • 刪除 isAlignLeft()方法,需要靠右時,直接在佈局中處理就可以了。

  • 優化快取機制。