package Ġcom . mis sn al gas . ph r 2 . view model Ċ Ċ import Ġandroid . animation . Argb Evaluator Ċ import Ġandroid . app . Application Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Transform ations Ċ import Ġcom . mis sn al gas . ph r 2 . view pager . Fragments Ċ import Ġkotlin . math . floor Ċ Ċ class ĠMain ViewModel ( app : ĠApplication ) Ġ: ĠAndroid ViewModel ( app ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġon Page ChangeListener Ġ: ĠMutable LiveData < Float ?> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn @ lazy ĠMutable LiveData < Float ?> () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgradient Calculator ( color A Ġ: ĠInt , Ġcolor B Ġ: ĠInt , Ġcolor C Ġ: ĠInt ) Ġ: ĠGradient Drawable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGradient Drawable ( Gradient Drawable . Orientation . TOP _ BOTTOM , Ġint ArrayOf ( color A , color B , Ġcolor C )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠbackgroundColor LiveData Ġ: ĠLive Data < Gradient Drawable ?> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarg b Evaluator Ġ= ĠArg b Evaluator () ĊĠĠĠĠĠĠĠ Ġreturn @ lazy ĠTransform ations . map ( on Page ChangeListener ) Ġ{ Ġoffset Sum Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Sum ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġif Ġ( floor ( offset Sum ) Ġ> ĠF rag ments . FRAG MENTS _ COUNT - 1 ) ĠF rag ments . FRAG MENTS _ COUNT - 1 Ġelse Ġfloor ( offset Sum ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġoffset Sum Ġ- Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Color Ġ= ĠF rag ments . FRAG MENTS [ position ]. colors ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġif Ġ( position Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Color Ġ= ĠF rag ments . FRAG MENTS [ position + 1 ]. colors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradient Calculator ( arg b Evaluator . evaluate ( offset , Ġprev Color [ 0 ], Ġnext Color [ 0 ]) Ġas ĠInt , Ġarg b Evaluator . evaluate ( offset , Ġprev Color [ 1 ], Ġnext Color [ 1 ]) Ġas ĠInt , Ġarg b Evaluator . evaluate ( offset , Ġprev Color [ 2 ], Ġnext Color [ 2 ]) Ġas ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradient Calculator ( prev Color [ 0 ], Ġprev Color [ 1 ], Ġprev Color [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Page ChangeListener ( value Ġ: ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Page ChangeListener . post Value ( value ) ĊĠĠĠ Ġ} Ċ Ċ }