Sobes.tech
Middle

Ինչպես իրականացնել անիմացիաները RecyclerView-ում?

sobes.tech AI

Պատասխան AI-ից

RecyclerView-ը օգտագործում է ItemAnimator՝ տվյալների հավաքածուում փոփոխությունները անիմացիայով ցույց տալու համար: Դեպքում, ըստ նախնական կարգավորումների, օգտագործվում է DefaultItemAnimator:

Երբ տեղի են ունենում փոփոխություններ (հավելում, հեռացում, տեղափոխում), RecyclerView-ը տեղեկացնում է ItemAnimator-ին: Այս վերջինը վերլուծում է փոփոխությունները և սկսում համապատասխան անիմացիաները:

ItemAnimator-ի հիմնական մեթոդները փոփոխությունները մշակելու համար են՝

  • animateAdd(): Նոր տարր ավելացնելու անիմացիա:
  • animateRemove(): Տարր հեռացնելու անիմացիա:
  • animateMove(): Տարր տեղափոխելու անիմացիա:
  • animateChange(): Տարրի բովանդակության փոփոխության անիմացիա:

Անհատականացված անիմացիաները ստեղծվում են ժառանգելով ItemAnimator կամ DefaultItemAnimator-ից և վերագրելով այդ մեթոդները: Մեթոդների ներսում կարելի է օգտագործել տարբեր անիմացիոն դասեր՝ օրինակ, ValueAnimator կամ ObjectAnimator:

Օրինակ՝ պարզ անհատականացված ավելացման անիմացիա:

class CustomItemAnimator : DefaultItemAnimator() {

    override fun animateAdd(holder: RecyclerView.ViewHolder): Boolean {
        holder.itemView.alpha = 0f // սկզբնական վիճակ՝ ամբողջությամբ թափանցիկ
        holder.itemView.animate()
            .alpha(1f) // վերջնական վիճակ՝ ամբողջությամբ տեսանելի
            .setDuration(addDuration) // անիմացիայի տևողությունը
            .setListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator?) {
                    dispatchAddFinished(holder) // տեղեկացնել RecyclerView-ին՝ ավարտի մասին
                }
                override fun onAnimationCancel(animation: Animator?) {
                    dispatchAddFinished(holder)
                }
            })
            .start()
        return true // ցույց է տալիս, որ անիմացիան սկսվել է
    }
}

Որպեսզի կիրառեք անհատականացված անիմատոր, այն պետք է սահմանեք RecyclerView-ում՝

recyclerView.itemAnimator = CustomItemAnimator()