Recyclerview關(guān)于ItemDecoration那些事

RecyclerView沒有像之前ListView提供divider屬性怎囚,而是提供了方法

recyclerView.addItemDecoration()

其中ItemDecoration需要我們自己去定制重寫恳守,一開始可能有人會(huì)覺得麻煩不好用催烘,最后你會(huì)發(fā)現(xiàn)這種可插拔設(shè)計(jì)不僅好用伊群,而且功能強(qiáng)大在岂。

ItemDecoration類主要是三個(gè)方法:

//可以實(shí)現(xiàn)類似繪制背景的效果蔽午,內(nèi)容在上面
public void onDraw(Canvas c, RecyclerView parent, State state)
//可以繪制在內(nèi)容的上面及老,覆蓋內(nèi)容
public void onDrawOver(Canvas c, RecyclerView parent, State state)
//可以實(shí)現(xiàn)類似padding的效果
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state)

下面來具體看下效果如何:

我們沒有添加任何ItemDecoration的界面


image.png

重寫getItemOffsets方法

public class SimplePaddingDecoration extends RecyclerView.ItemDecoration {

private int dividerHeight;


public SimplePaddingDecoration(Context context) {
    dividerHeight = context.getResources().getDimensionPixelSize(R.dimen.divider_height);
}

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    super.getItemOffsets(outRect, view, parent, state);
    outRect.bottom = dividerHeight;//類似加了一個(gè)bottom padding
}
}

沒錯(cuò),就這么2行代碼僧鲁,然后添加到RecyclerView

recyclerView.addItemDecoration(new SimplePaddingDecoration(this));

實(shí)現(xiàn)效果:


image.png

重寫OnDraw方法

 @Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
    //先初始化一個(gè)Paint來簡(jiǎn)單指定一下Canvas的顏色,就黑的吧寞秃!
    Paint paint = new Paint();
    paint.setStrokeWidth(size);
    paint.setColor(ContextCompat.getColor(parent.getContext(), line_color));

    //獲得RecyclerView中總條目數(shù)量
    int childCount = parent.getChildCount();

    //遍歷一下
    for (int i = 0; i < childCount; i++) {
        if (i == 0 || i == childCount || i == childCount - 1) {
            //如果是第一個(gè)條目斟叼,那么我們就不畫邊框了
            continue;
        }

        //獲得子View,也就是一個(gè)條目的View春寿,準(zhǔn)備給他畫上邊框
        View childView = parent.getChildAt(i);

        //先獲得子View的長(zhǎng)寬朗涩,以及在屏幕上的位置,方便我們得到邊框的具體坐標(biāo)
        float x = childView.getX();
        float y = childView.getY();
        int width = childView.getWidth();
        int height = childView.getHeight();

        c.drawLine(x + margin, y, x + width - margin, y, paint);

        super.onDrawOver(c, parent, state);
    }
}

實(shí)現(xiàn)效果:

image.png

重寫OnDrawOver方法

此方法和OnDraw方法大同小異绑改,唯一的區(qū)別便是:OnDrawOver是在你的item上層繪制谢床,例如:當(dāng)你的item設(shè)置了background時(shí),OnDraw方法繪制的內(nèi)容會(huì)被item的background所遮蓋厘线,而OnDrawOver則不會(huì)识腿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市造壮,隨后出現(xiàn)的幾起案子渡讼,更是在濱河造成了極大的恐慌伟众,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)檬洞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門广料,熙熙樓的掌柜王于貴愁眉苦臉地迎上來县遣,“玉大人其兴,你說我怎么就攤上這事守问。” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵闻坚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)威恼,這世上最難降的妖魔是什么腹备? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喳整。我一直安慰自己瞬项,他們只是感情好妥衣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布芦倒。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天伶跷,我揣著相機(jī)與錄音,去河邊找鬼靖诗。 笑死颂鸿,一個(gè)胖子當(dāng)著我的面吹牛嘴纺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闲擦,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼辙谜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼定嗓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤找田,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后籽懦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體于个,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年暮顺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厅篓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秀存。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖羽氮,靈堂內(nèi)的尸體忽然破棺而出或链,到底是詐尸還是另有隱情,我是刑警寧澤档押,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布澳盐,位于F島的核電站,受9級(jí)特大地震影響令宿,放射性物質(zhì)發(fā)生泄漏叼耙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一粒没、第九天 我趴在偏房一處隱蔽的房頂上張望筛婉。 院中可真熱鬧,春花似錦癞松、人聲如沸爽撒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匆浙。三九已至,卻和暖如春厕妖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挑庶。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工言秸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迎捺。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓举畸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凳枝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抄沮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容