Android에서 ItemDecoration을 사용해 보았습니다.
9469 단어 안드로이드RecyclerView
목적
소재:캘린더(Grid 형식)
아래에서 작성한 캘린더를 개조해, 매월의 헤더를 ItemDecoration로 실현한다.
포인트
RecyclerView.ItemDecoration에서 할 수있는 일은 크게 두 가지.
- getItemOffsets
item의 위치를 이동한다
- onDraw, onDrawOver
item 아래 또는 위로 그리기
구현 내용
DateItemDecoration.kt
class DateItemDecoration: RecyclerView.ItemDecoration() {
companion object {
private const val HEADER_HEIGHT = 100
private val headerBackGroundPaint = Paint().apply {
color = Color.GRAY
alpha = 200
}
private val headerTextPaint = Paint().apply {
textSize = 65f
color = Color.WHITE
}
}
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
super.getItemOffsets(outRect, view, parent, state)
if ((parent.getChildViewHolder(view) as DateAdapter.DateAdapterHolder).isFirstWeek) {
outRect.top = HEADER_HEIGHT
} else {
outRect.top = 0
}
}
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
super.onDrawOver(c, parent, state)
val size = state.itemCount
for (i in 0 until size step 7) {
drawHeader(parent, c, i, i + 7)
}
}
private fun drawHeader(parent: RecyclerView, c: Canvas, prev: Int, now: Int) {
val prevView = parent.getChildAt(prev)
val prevHolder =
if (prevView == null) {
return
} else {
parent.getChildViewHolder(prevView) as DateAdapter.DateAdapterHolder
}
if (prevHolder.isFirstWeek) {
c.drawRect(
0f,
prevView.y - HEADER_HEIGHT,
parent.width.toFloat(),
prevView.y,
headerBackGroundPaint
)
c.drawText(
"${prevHolder.month} ${prevHolder.year}",
0f,
prevView.y,
headerTextPaint
)
}
}
}
코드에 대한 자세한 내용은 아래 참조:
htps : // 기주 b. 코 m / 요시 히로 카토 / 안 d 로이 d 사 mp ぇ s / t re / b8 ~ b2489 ~ fb113 50df947400 아 640fc357 아 0801 / 코 t 사 mp ぇ 아 p ぃ 카치
Reference
이 문제에 관하여(Android에서 ItemDecoration을 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshihiro-kato/items/619b4d42f741a1ef0d63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)