From 5b09479c884aeaba380bdf8499cccdd075fcfac8 Mon Sep 17 00:00:00 2001 From: stanislav Date: Tue, 1 Sep 2020 00:40:30 +0300 Subject: [PATCH] BottomDividerItemDecoration --- .../decorators/BottomDividerItemDecoration.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 views/src/main/java/ru/touchin/roboswag/views/decorators/BottomDividerItemDecoration.kt diff --git a/views/src/main/java/ru/touchin/roboswag/views/decorators/BottomDividerItemDecoration.kt b/views/src/main/java/ru/touchin/roboswag/views/decorators/BottomDividerItemDecoration.kt new file mode 100644 index 0000000..bc14997 --- /dev/null +++ b/views/src/main/java/ru/touchin/roboswag/views/decorators/BottomDividerItemDecoration.kt @@ -0,0 +1,30 @@ +package ru.touchin.roboswag.views.decorators + +import android.content.Context +import android.graphics.Rect +import android.view.View +import androidx.annotation.DrawableRes +import androidx.recyclerview.widget.RecyclerView + +open class BottomDividerItemDecoration( + context: Context, + @DrawableRes drawableId: Int? = null, + override val predicate: ((position: Int) -> Boolean) = { true }, + override val startMargin: Int = 0, + override val endMargin: Int = 0, + override val offset: Boolean = true, + override val showOnLastItem: Boolean = false +) : DividerItemDecoration(context, drawableId, predicate, startMargin, endMargin, offset, showOnLastItem) { + + override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) { + val position = parent.getChildAdapterPosition(view) + if (offset && predicate(position) && (position != state.itemCount - 1 || showOnLastItem)) { + outRect.set(0, 0, 0, divider.intrinsicHeight) + } + } + + override fun getDividerTop(child: View): Int = getDividerBottom(child) - divider.intrinsicHeight + + override fun getDividerBottom(child: View): Int = bounds.bottom + child.translationY.toInt() + +}