日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【RecyclerView】 六、RecyclerView.ItemDecoration 条目装饰 ( 简介 | onDraw | onDrawOver | getItemOffsets )

發(fā)布時間:2025/6/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【RecyclerView】 六、RecyclerView.ItemDecoration 条目装饰 ( 简介 | onDraw | onDrawOver | getItemOffsets ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、RecyclerView.ItemDecoration 簡介
    • 1、onDraw() 方法
    • 2、onDrawOver () 方法
    • 3、getItemOffsets () 方法
  • 二、RecyclerView.ItemDecoration 源碼注釋解析
  • 三、RecyclerView 相關(guān)資料





一、RecyclerView.ItemDecoration 簡介



RecyclerView.ItemDecoration 是 RecyclerView 的內(nèi)部類 , ItemDecoration 顧名思義就是作為 Item 條目裝飾用的 ;

可以控制 RecyclerView 條目組件的 邊距 , 以及在 item 條目組件 底層繪制背景 , 在 item 條目組件 上層繪制裝飾 ;


RecyclerView.ItemDecoration 使用時 , 可以選擇重寫以下三個方法 :

// 繪制底層背景 public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull State state) // 繪制上層裝飾 public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull State state) // 設(shè)置邊距 public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,@NonNull RecyclerView parent, @NonNull State state)

1、onDraw() 方法


onDraw方法 : 在提供給 RecyclerView 的畫布上繪制合適的裝飾 , 在該方法中繪制的任何內(nèi)容, 都在 item 布局組件繪制之前繪制, 繪制的內(nèi)容都被 item 布局覆蓋 ;


void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull State state) 參數(shù)說明 :

@NonNull Canvas c : 繪制背景的畫布 ;

@NonNull RecyclerView parent : 要添加裝飾的 RecyclerView ;

@NonNull State state : RecyclerView 的當(dāng)前狀態(tài) ;


函數(shù)原型如下 :

/*** 在提供給 RecyclerView 的畫布上繪制合適的裝飾.* 在該方法中繪制的任何內(nèi)容, 都在 item 布局組件繪制之前繪制, 繪制的內(nèi)容都被 item 布局覆蓋.* * @param c 繪制的畫布* @param parent 要添加裝飾的 RecyclerView* @param state RecyclerView 的當(dāng)前狀態(tài) */public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull State state) {onDraw(c, parent);}

2、onDrawOver () 方法


onDrawOver : 在提供給 RecyclerView 的畫布上繪制合適的裝飾, 在該方法中繪制的任何內(nèi)容, 都在 item 布局組件繪制之后繪制, 繪制的內(nèi)容會覆蓋 item 布局, 顯示在 item 布局上層 ;


void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull State state) 參數(shù)說明 :

@NonNull Canvas c : 繪制背景的畫布 ;

@NonNull RecyclerView parent : 要添加裝飾的 RecyclerView ;

@NonNull State state : RecyclerView 的當(dāng)前狀態(tài) ;


函數(shù)原型如下 :

/*** 在提供給 RecyclerView 的畫布上繪制合適的裝飾.* 在該方法中繪制的任何內(nèi)容, 都在 item 布局組件繪制之后繪制, 繪制的內(nèi)容會覆蓋 item 布局, * 顯示在 item 布局上層.** @param c 繪制的畫布* @param parent 要添加裝飾的 RecyclerView* @param state RecyclerView 的當(dāng)前狀態(tài) */public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent,@NonNull State state) {onDrawOver(c, parent);}

3、getItemOffsets () 方法


getItemOffsets 方法 : 設(shè)置當(dāng)前的 item 條目布局組件的邊距 , 效果類似于 padding 或 margin ; 默認(rèn)值四個邊距都是 0 ;


針對特殊位置的特殊設(shè)置 : 如果需要取訪問 Adapter 適配器中的關(guān)聯(lián)數(shù)據(jù) , 調(diào)用 RecyclerView.getChildAdapterPosition(View) , 方法獲取適配器中的該 View 組件位置 ; 然后將特殊位置可以設(shè)置不同的參數(shù) , 即可實現(xiàn) " 針對特殊位置的特殊設(shè)置 " 效果 ;


void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull State state) 參數(shù)說明 :

@NonNull Rect outRect : 接受輸出的矩形 ;

@NonNull View view : 要裝飾的子 View ;

@NonNull RecyclerView parent : 該 ItemDecoration 正在裝飾的 RecyclerView ;

@NonNull State state : RecyclerView 的當(dāng)前狀態(tài) ;


函數(shù)原型如下 :

/*** 檢索任何設(shè)置給 item 布局條目的偏移量.* outRect 的任何變量字段指定了 item 布局組件邊距的像素值, 效果類似于 padding 或 margin.* outRect 默認(rèn)的邊距值都是 0.** <p>* 如果想要針對某些位置的 item 條目組件設(shè)置的 ItemDecoration 不生效 , * 應(yīng)該設(shè)置 outRect 所有的 4 個字段值為 0 ;** <p>* 如果需要取訪問 Adapter 適配器中的關(guān)聯(lián)數(shù)據(jù) , 調(diào)用 RecyclerView.getChildAdapterPosition(View)* 方法獲取適配器中的該 View 組件位置 ;** @param outRect 接受輸出的矩形 .* @param view 要裝飾的子 View .* @param parent 該 ItemDecoration 正在裝飾的 RecyclerView .* @param state RecyclerView 的當(dāng)前狀態(tài) .*/public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,@NonNull RecyclerView parent, @NonNull State state) {getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),parent);}



二、RecyclerView.ItemDecoration 源碼注釋解析



RecyclerView.ItemDecoration 源碼 : 只添加了中文注釋 ;

public class RecyclerView extends ViewGroup implements ScrollingView,NestedScrollingChild2, NestedScrollingChild3 {/*** RecyclerView.ItemDecoration 允許應(yīng)用在適配器中的 item 條目組件之外, 添加特殊的繪圖和布局. * 可以用于繪制 item 條目間的分割線, 高亮顯示, 分組邊界等等. ** 所有的 ItemDecoration 會按照添加順序繪制, 在 item 條目組件繪制前先執(zhí)行 onDraw 方法 , * 在 item 條目繪制之后執(zhí)行 onDrawOver 方法.*/public abstract static class ItemDecoration {/*** 在提供給 RecyclerView 的畫布上繪制合適的裝飾.* 在該方法中繪制的任何內(nèi)容, 都在 item 布局組件繪制之前繪制, 繪制的內(nèi)容都被 item 布局覆蓋.* * @param c 繪制的畫布* @param parent 要添加裝飾的 RecyclerView* @param state RecyclerView 的當(dāng)前狀態(tài) */public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull State state) {onDraw(c, parent);}/*** @deprecated 被廢棄的方法, 不推薦使用 * Override {@link #onDraw(Canvas, RecyclerView, RecyclerView.State)}*/@Deprecatedpublic void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent) {}/*** 在提供給 RecyclerView 的畫布上繪制合適的裝飾.* 在該方法中繪制的任何內(nèi)容, 都在 item 布局組件繪制之后繪制, 繪制的內(nèi)容會覆蓋 item 布局, * 顯示在 item 布局上層.** @param c 繪制的畫布* @param parent 要添加裝飾的 RecyclerView* @param state RecyclerView 的當(dāng)前狀態(tài) */public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent,@NonNull State state) {onDrawOver(c, parent);}/*** @deprecated 被廢棄的方法, 不推薦使用 * Override {@link #onDrawOver(Canvas, RecyclerView, RecyclerView.State)}*/@Deprecatedpublic void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent) {}/*** @deprecated 被廢棄的方法, 不推薦使用 * Use {@link #getItemOffsets(Rect, View, RecyclerView, State)}*/@Deprecatedpublic void getItemOffsets(@NonNull Rect outRect, int itemPosition,@NonNull RecyclerView parent) {outRect.set(0, 0, 0, 0);}/*** 檢索任何設(shè)置給 item 布局條目的偏移量.* outRect 的任何變量字段指定了 item 布局組件邊距的像素值, 效果類似于 padding 或 margin.* outRect 默認(rèn)的邊距值都是 0.** <p>* 如果想要針對某些位置的 item 條目組件設(shè)置的 ItemDecoration 不生效 , * 應(yīng)該設(shè)置 outRect 所有的 4 個字段值為 0 ;** <p>* 如果需要取訪問 Adapter 適配器中的關(guān)聯(lián)數(shù)據(jù) , 調(diào)用 RecyclerView.getChildAdapterPosition(View)* 方法獲取適配器中的該 View 組件位置 ;** @param outRect 接受輸出的矩形 .* @param view 要裝飾的子 View .* @param parent 該 ItemDecoration 正在裝飾的 RecyclerView .* @param state RecyclerView 的當(dāng)前狀態(tài) .*/public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,@NonNull RecyclerView parent, @NonNull State state) {getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),parent);}} }



三、RecyclerView 相關(guān)資料



官方文檔 :

使用 RecyclerView 創(chuàng)建動態(tài)列表 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview

高級 RecyclerView 自定義 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview-custom


代碼示例 :

GitHub 源碼地址 : https://github.com/han1202012/001_RecyclerView

博客源碼快照 : https://download.csdn.net/download/han1202012/14945904

( 使用 Android Studio 打開 )

總結(jié)

以上是生活随笔為你收集整理的【RecyclerView】 六、RecyclerView.ItemDecoration 条目装饰 ( 简介 | onDraw | onDrawOver | getItemOffsets )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产av毛片 | 免费av大全 | 我们的2018在线观看免费高清 | 亚洲精品tv | 日韩字幕 | 久热欧美 | 2018自拍偷拍 | 一区二区在线不卡 | 天堂中文视频 | 黄色裸体网站 | 久久精品国产亚洲AV成人雅虎 | 日韩一区二区高清视频 | 夜夜躁日日躁狠狠久久av | 午夜精品免费 | 久久久久亚洲av片无码v | 欧美双性人妖o0 | 夜夜嗨av一区二区三区网页 | 91香蕉久久 | 亚洲v欧美v另类v综合v日韩v | 国产九九热视频 | 丰满多毛的大隂户视频 | 一级久久| 免费毛片基地 | 97国产精品视频人人做人人爱 | 国产精品自拍在线 | 男人喷出精子视频 | 亚州av综合色区无码一区 | 免费欧美日韩 | 亚洲一级大片 | 白嫩白嫩国产精品 | wwwxxoo| 五月婷综合网 | 久久草精品 | 国产香蕉网 | 啪啪天堂 | 国产黄网在线观看 | 在线干| www.久久精品视频 | 95精品视频 | 蜜桃臀aⅴ精品一区二区三区 | 成人片在线播放 | 最新国产精品自拍 | 国产av成人一区二区三区高清 | 亚洲av综合永久无码精品天堂 | 特黄a级片 | 狠狠五月天 | 欧美日韩有码 | 女色综合| 欧美黄色aaa | av在线播放观看 | 中文字幕首页 | 中文字幕永久 | 人妻在线日韩免费视频 | 国产精品无码一区二区三区免费 | 黄色a一级 | 国产精品婷婷午夜在线观看 | 性福利视频 | 在线免费观看污视频 | 国产精品久线在线观看 | 成在人线av | 美国美女群体交乱 | 一区亚洲| 日韩福利一区二区三区 | 日韩有码一区二区三区 | 国产精久久久久久 | 三年中文在线观看免费观看 | 日本中文字幕网站 | 69精品无码成人久久久久久 | 欧美少妇xxxxx | 女优视频在线观看 | 天天色天天草 | 在线视频区 | 欧美亚洲在线播放 | 国产日韩精品久久 | 欧美亚色| 天天摸天天舔天天操 | 国产黄大片 | 亚洲剧情在线 | 中文字幕日韩av | 超碰免费av | 欧美精产国品一二三 | 乳色吐息免费看 | 肉色欧美久久久久久久免费看 | 丰满人妻一区二区三区无码av | 少妇久久久久久被弄高潮 | av老司机在线 | 艳妇臀荡乳欲伦交换电影 | 大奶子在线观看 | 久久亚洲精品国产精品黑人v | 五月天久久久久 | 成人免费看aa片 | 国产一区二区三区电影在线观看 | 精品国产av 无码一区二区三区 | 中文在线视频观看 | 国产精品国产三级国产专区51区 | 青娱乐在线视频免费观看 | 欧美 日本 国产 | 男人的天堂一区 | 国产一区亚洲二区三区 |