SpanItemDecoration extends RecyclerView.ItemDecoration.
It shows RecyclerView decoration astride multiple items.
Inspired by Droidkaigi 2019 official app.
repositories {
maven {
url 'https://dl.bintray.com/marshi/maven'
}
}
implementation 'marshi.android:spaniemdecoration:1.0'
Extends BitmapSpanItemDecoration and override asset(position: Int)
function.
The function return DecorationAsset which define asset resource and asset id according to position.
If id is same value between consecutive position, latter asset is not shown.
In ConcreteBitmapSpamItemDecoration class case, when position value is 0 or 1, same id is set.
Therefore a bitmap is shown when position value is 0 and is not shown when the value is 1.
class ConcreteBitmapSpamItemDecoration(
context: Context,
private val groupAdapter: RecyclerView.Adapter<*>,
@DimenRes leftSpace: Int,
@DimenRes paddingTop: Int,
@DimenRes paddingBottom: Int
) : BitmapSpanItemDecoration(
context,
leftSpace,
paddingTop,
paddingBottom
) {
private val bitmap = BitmapFactory.decodeResource(
context.resources,
R.drawable.ic_launcher
)
private val bitmapRound = BitmapFactory.decodeResource(
context.resources,
R.drawable.ic_launcher_round
)
override fun asset(position: Int): DecorationAsset<Bitmap>? {
if (position < 0 || position >= groupAdapter.itemCount) {
return null
}
return when (position / 2 % 2) {
0 -> DecorationAsset(bitmap, R.drawable.ic_launcher.toString())
1 -> DecorationAsset(bitmapRound, R.drawable.ic_launcher_round.toString())
else -> DecorationAsset(bitmap, R.drawable.ic_launcher_round.toString())
}
}
}