|
|
@@ -0,0 +1,49 @@ |
|
|
package me.seebrock3r.common.widget |
|
|
|
|
|
import android.graphics.Canvas |
|
|
import android.graphics.Paint |
|
|
import android.graphics.Rect |
|
|
import android.view.View |
|
|
import androidx.annotation.ColorInt |
|
|
import androidx.annotation.Px |
|
|
import androidx.core.graphics.withTranslation |
|
|
import androidx.core.view.children |
|
|
import androidx.recyclerview.widget.RecyclerView |
|
|
|
|
|
class DividerItemDecorator( |
|
|
@param:ColorInt @field:ColorInt private val strokeColor: Int, |
|
|
@param:Px @field:Px private val strokeWidth: Int, |
|
|
@param:Px @field:Px private val marginStart: Float = 0.0F, |
|
|
@param:Px @field:Px private val marginEnd: Float = marginStart, |
|
|
@param:Px @field:Px private val horizontalSpacing: Int, |
|
|
@param:Px @field:Px private val verticalSpacing: Int = horizontalSpacing |
|
|
) : RecyclerView.ItemDecoration() { |
|
|
|
|
|
private val dividerPaint = Paint().apply { |
|
|
color = strokeColor |
|
|
flags = Paint.ANTI_ALIAS_FLAG |
|
|
} |
|
|
|
|
|
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) { |
|
|
outRect.set(horizontalSpacing, verticalSpacing, horizontalSpacing, verticalSpacing) |
|
|
} |
|
|
|
|
|
override fun onDrawOver(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { |
|
|
parent.children.forEach { child -> |
|
|
if (child.isNotLastItem(parent, state.itemCount)) |
|
|
canvas.withTranslation(x = 0.0F, y = verticalSpacing.toFloat()) { |
|
|
val lineY = child.bottom - strokeWidth / 2.0F |
|
|
drawLine( |
|
|
child.left + marginStart, |
|
|
lineY, |
|
|
child.right - marginEnd, |
|
|
lineY, |
|
|
dividerPaint |
|
|
) |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
private fun View.isNotLastItem(parent: RecyclerView, itemCount: Int) = |
|
|
parent.getChildAdapterPosition(this) < itemCount - 1 |
|
|
} |