Epoxy를 사용하면서 SnapHelper를 사용할 일이 생겼다.
SnapHelper란 스크롤을 하는 순간에 아이템 한개씩 정렬되는 현상을 본 적이 있을것이다.
그것을 도와주기 위한 도구이다.
기본 Epoxy가 준비되었다는 가정하에 진행을 하겠다.
0.SnapHelper implementation
//snaphelper
implementation 'com.github.rubensousa:gravitysnaphelper:2.2.2'
@ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT)
class CustomSnappingCarousel @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : Carousel(context, attrs, defStyleAttr) {
fun setSnapHelper() {
val snapHelper = GravitySnapHelper(Gravity.CENTER)
snapHelper.attachToRecyclerView(this)
}
}
2.EpoxyController에서 onBind를 통해 setSnapHelper()함수 달아주기
//Carousel_()에서 변경한다.
CustomSnappingCarouselModel_()
.id("viewpagerList")
.numViewsToShowOnScreen(1.1f)
.models(viewpagerItem.map { viewpager ->
HomeViewPagerModel_()
.id(viewpager.id)
.viewpager(viewpager)
})
//추가되는 부분 onBind를 입력하고 Setting하기
// 추후에 Indicator를 실행
.onBind { _, view, _ ->
view.setSnapHelper()
}
.addTo(this)