由於recyclerview並沒有支援divider這樣的屬性,所以就需要我們自己去實現。這裡主要實現第二種
建立類繼承及recyclerview.itemdecoration
public
class
myitemdecoration
extends
recyclerview.itemdecoration
@override
public
void
getitemoffsets(rect outrect, view view, recyclerview parent, recyclerview.state state)
}
新增建構函式private drawable mdivider;
// 傳入我們自己定義的 drawableid
public
myitemdecoration(context context, int drawableresid)
}
在ondraw()方法中新增如下**@override
public
void
ondraw(canvas c, recyclerview parent, recyclerview.state state)
繼續/**
* 繪製水平分割線
*/private
void
drawhorizontal(canvas canvas, recyclerview parent)
canvas.restore();
}/**
* 繪製豎直分割線
*/private
void
drawvertical(canvas canvas, recyclerview parent)
canvas.restore();
}
上面重要是繪製的**,下面來分析getitemoffsets()方法;@override
public
void
getitemoffsets(rect outrect, view view, recyclerview parent,recyclerview.state state)
// 判斷當前view是否是最後一列
if (islastcolumn(view,parent))
// 為分割線預留的位置,在測量子view的時候使用
outrect.bottom = bottom;
outrect.right = right;
}
判斷當前view是否是最後一行islastrow(view,parent)/**
* 是否是最後一行
*/private
boolean
islastrow(view view, recyclerview parent)
判斷當前view是否是最後一列islastcolumn(view,parent)/**
* 是否是最後一列
*/private
boolean
islastcolumn(view view, recyclerview parent)
得到總的列數private
intgetspancount( recyclerview parent) else
if (layoutmanager instanceof staggeredgridlayoutmanager)
return spancount;
}
自定義drawable<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:shape="rectangle" > // 設定形狀為矩形
android:height="50dp"
android:width="50dp"/> 寬度和高度
//漸變色
android:startcolor="@android:color/holo_blue_bright" 開始顏色
android:endcolor="@android:color/holo_blue_dark" 結束顏色
android:centercolor="@android:color/holo_blue_light" 中間色
/>
shape>
類似listview的效果
類似gridview效果
在recyclerview中測量子view的**中
public
void
measurechild(view child, int widthused, int heightused)
}
這句**做了什麼呢 rectinsets=mrecyclerview.getitemdecorinsetsforchild(child);rect getitemdecorinsetsforchild(view child)
if (mstate.isprelayout() && (lp.isitemchanged() || lp.isviewinvalid()))
final rect insets = lp.mdecorinsets
; insets.set(0, 0, 0, 0);
// mitemdecorations 我們新增的分割線都存放在這個集合裡面
final int decorcount = mitemdecorations.size();
for (int i = 0
; i < decorcount; i++)
lp.minsetsdirty = false;
return insets;
}
@override
public
void
ondraw(canvas c)
}
為recyclerview新增懸浮view
recyclerview中列表一般使用linearlayoutmanage,其中linearlayoutmanage有方法findviewbyposition position 和findfirstvisibleitemposition,他可以分別用來獲取你指定position的view和第乙個顯示...
為RecyclerView新增精美的分割線
最近由於需求問題,需要寫乙個列表。以前總是使用listview,從來沒有用過recyclerview。所以這次打算嘗試一下。然後就開始動手幹活了。recyclerview布局寫好了。然後寫adapter,一切正常。recyclerview.additemdecoration new divideri...
給RecyclerView新增頭部
最近開發的時候遇到乙個問題,就是scrollview巢狀recyclerview的時候,在高版本的的手機上執行的時候整個頁面是可以正常滾動的,但是在低版本手機上執行的時候recyclerview以上的內容就不會顯示出來了,整個頁面只有recyclerview,並且充滿了整個螢幕,recyclervi...