롤리팝 출시 이후로 RecyclerView가 도입되고 AdapterView를 커스터마이징 하기가 편해졌다.
오늘은 UIPickerView 스타일로 RecyclerView의 투명도를 주고 싶어서 레이아웃매니저를 다음과 같이 적용했다.

class CustomLinearLayoutManager(context: Context) : LinearLayoutManager(context, VERTICAL, false) {
   private fun updateChildrenAlpha() {
      for (i in 0 until childCount) {
         val child: View = getChildAt(i)
         val bottom: Float = getDecoratedBottom(child).toFloat()
         val top: Float = getDecoratedTop(child).toFloat()
         val childCenter: Float = bottom + (top - bottom) / 2f
         val center: Float = height / 2f
         child.alpha = (center - Math.abs(center - childCenter)) / center
      }  }
   override fun scrollVerticallyBy(dy: Int, recycler: RecyclerView.Recycler?, state: RecyclerView.State?): Int {
      updateChildrenAlpha()
      return super.scrollVerticallyBy(dy, recycler, state)
   }
   override fun onLayoutChildren(recycler: RecyclerView.Recycler?, state: RecyclerView.State?) {
      super.onLayoutChildren(recycler, state)
      updateChildrenAlpha()
   }
}

가운데를 중심으로 위아래가 자연스럽게 fade-in 과 fade-out 되는모습을 볼수 있다.

카테고리: Kotlin

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.