84 lines
2.4 KiB
Kotlin
84 lines
2.4 KiB
Kotlin
package jp.juggler.subwaytooter.actmain
|
|
|
|
import android.content.Context
|
|
import android.graphics.Canvas
|
|
import android.graphics.Paint
|
|
import android.graphics.Rect
|
|
import android.view.View
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
import jp.juggler.subwaytooter.R
|
|
import jp.juggler.util.ui.attrDrawable
|
|
|
|
class TabletColumnDivider(context: Context) : RecyclerView.ItemDecoration() {
|
|
|
|
companion object {
|
|
// private val log = LogCategory("TabletColumnDivider")
|
|
|
|
var color: Int = 0
|
|
|
|
var barWidth: Int = 0
|
|
}
|
|
|
|
private val drawable = context.attrDrawable(R.attr.colorSettingDivider)
|
|
private val paint = Paint()
|
|
private val rect = Rect()
|
|
|
|
init {
|
|
val density = context.resources.displayMetrics.density
|
|
barWidth = (density * 1f + 0.5f).toInt()
|
|
paint.style = Paint.Style.FILL
|
|
paint.isAntiAlias = true
|
|
}
|
|
|
|
override fun getItemOffsets(
|
|
outRect: Rect,
|
|
view: View,
|
|
parent: RecyclerView,
|
|
state: RecyclerView.State,
|
|
) {
|
|
outRect.set(0, 0, barWidth, 0)
|
|
}
|
|
|
|
override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
|
|
val clip = canvas.clipBounds
|
|
|
|
val top = clip.top
|
|
val bottom = clip.bottom
|
|
|
|
if (color != 0) {
|
|
paint.color = color
|
|
}
|
|
|
|
for (i in 0 until parent.childCount) {
|
|
val child = parent.getChildAt(i)
|
|
val params = child.layoutParams as RecyclerView.LayoutParams
|
|
|
|
if (child.left >= clip.right) break
|
|
|
|
if (i == 0) {
|
|
// 左端
|
|
val left = child.left - params.leftMargin
|
|
val right = left + barWidth
|
|
if (color != 0) {
|
|
rect.set(left, top, right, bottom)
|
|
canvas.drawRect(rect, paint)
|
|
} else {
|
|
drawable.setBounds(left, top, right, bottom)
|
|
drawable.draw(canvas)
|
|
}
|
|
}
|
|
|
|
val left = child.right + params.rightMargin
|
|
val right = left + barWidth
|
|
|
|
if (color != 0) {
|
|
rect.set(left, top, right, bottom)
|
|
canvas.drawRect(rect, paint)
|
|
} else {
|
|
drawable.setBounds(left, top, right, bottom)
|
|
drawable.draw(canvas)
|
|
}
|
|
}
|
|
}
|
|
}
|