package Ġcom . example . android dev challenge . ui . animation Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroidx . compose . animation . core . Finite Animation Spec Ċ import Ġandroidx . compose . animation . core . Transition Ċ import Ġandroidx . compose . animation . core . Tween Spec Ċ import Ġandroidx . compose . animation . core . animate Float Ċ import Ġandroidx . compose . animation . core . update Transition Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . graphics Layer Ċ import Ġandroidx . compose . ui . z Index Ċ Ċ private Ġenum Ġclass ĠAnimation State Ġ{ ĠInitial , ĠFinal Ġ} Ċ Ċ private Ġconst Ġval ĠTransition Duration Ġ= Ġ 8 0 0 Ċ private Ġval ĠDefault Transition Spec : Ġ@ Composable Ġ( Transition . Segment < Animation State >. () Ġ-> ĠFin ite Animation Spec < Float >) Ġ= ĊĠĠĠ Ġ{ ĠT ween Spec ( duration Millis Ġ= ĠTransition Duration ) Ġ} Ċ Ċ class ĠFold List Animation ( ĊĠĠĠ Ġprivate Ġval Ġcount : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġitem Height : ĠFloat Ċ ) Ġ: ĠList Animation () Ġ{ ĊĊĠĠĠ Ġ@ Suppress Lint (" Composable Naming ") ĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġoverride Ġfun Ġstart Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġanimation State Ġby Ġremember Ġ{ Ġmutable State Of ( Animation State . Initial ) Ġ} ĊĠĠĠĠĠĠĠ ĠLa unched Effect ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation State Ġ= ĠAnimation State . Final ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtransition Ġ= Ġupdate Transition ( animation State ) ĊĊĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġtransition . animate Float ( Default Transition Spec ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation State . Initial Ġ-> Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation State . Final Ġ-> Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtranslation Y Ġ= Ġtransition . animate Float ( Default Transition Spec ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation State . Initial Ġ-> Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation State . Final Ġ-> Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrotation X Ġ= Ġtransition . animate Float ( Default Transition Spec ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation State . Initial Ġ-> Ġ 9 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation State . Final Ġ-> Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġanimation Ġ= Ġremember ( transition ) Ġ{ ĠAnimation Data ( alpha , Ġtranslation Y , Ġrotation X ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠModifier . apply Animation ( item Index : ĠInt ): ĠModifier Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Animation Started () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. z Index (( count Ġ- Ġitem Index ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. graphics Layer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġif Ġ( item Index Ġ== Ġ 0 ) Ġ 1 f Ġelse Ġanimation . alpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Y Ġ= Ġanimation . translation Y Ġ* Ġitem Height Ġ* Ġitem Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation X Ġ= Ġanimation . rotation X Ġ* Ġitem Index Ġ* Ġ 0 . 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ