Skip to content

Issue #24

dongk00 edited this page Feb 18, 2022 · 1 revision

ViewPager

viewpager adapter로 일반 recyclerview adapter 사용

fragmentstateadapter vs recyclerviewadapter 차이 => fragmentstateadapter에서는 하나하나의 fragment들을 항목으로 넣기 때문에 한 페이지에 다소 많은 기능이 필요할 때 유용 recyclerview adapter는 recyclerview처럼 사용하기 때문에 간단하고 반복적인 기능을 넣을 때 유용

val adapter = MonthlyCardAdapter(backgroundList)
binding.monthlyCard.adapter = adapter
binding.monthlyCard.offscreenPageLimit = 3 //양쪽 사이드에 항목이 보임
binding.monthlyCard.getChildAt(0).overScrollMode = View.OVER_SCROLL_NEVER

val transform = CompositePageTransformer()
transform.addTransformer(MarginPageTransformer(8))

transform.addTransformer { view: View, fl: Float ->
    val v = 1 - abs(fl)
    view.scaleY = 0.8f + v * 0.2f
}

binding.monthlyCard.setPageTransformer(transform)

<viewpager attribute>
android:clipToPadding="false"
android:clipChildren="false"
+ margin

Custom Calendar 추가

gridlayout spansize 7의 recyclerview adapter를 생성 총 갯수는 42개

val startIndex = cal.get(Calendar.DAY_OF_WEEK) - 1
val lastIndex = startIndex + cal.getActualMaximum(Calendar.DATE) - 1

calendar를 측정하고자 하는 년 월을 설정하고 1일로 맞춘 후 그 날의 요일을 가져온다(일:1, 월:2 , ... , 토:7) 그 날의 요일 - 1 이 시작하는 index이다. 시작 index + 그 달의 마지막 날 - 1이 마지막 index이다.

translateanimation

private val openAnim = TranslateAnimation(
    0f,
    0f,
    0f,
    binding.monthlyWritingExpandedLayout.height.toFloat()
).also {
    it.duration = 400
}

private val closeAnim = TranslateAnimation(
    0f,
    0f,
    binding.monthlyWritingExpandedLayout.height.toFloat(),
    0f
).also {
it.duration = 400
}

DiffUtil

기존 Recyclerview 에 추가

private val differCallback = object: DiffUtil.ItemCallback<DailyWritingItem>(){
    override fun areItemsTheSame(oldItem: DailyWritingItem, newItem: DailyWritingItem): Boolean {
        return oldItem.id == newItem.id
}

    override fun areContentsTheSame(oldItem: DailyWritingItem, newItem: DailyWritingItem): Boolean {
        return oldItem == newItem
    }
}

val differ = AsyncListDiffer(this,differCallback)

list는 differ.submitlist(list)로 전달 recyclerview 내에서는 differ.currentlist를 사용

override fun getItemCount(): Int = differ.currentList.size

val item = differ.currentList[adapterPosition]

Clone this wiki locally