package Ġengineer . echo . study . mv vm . vp 2 Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view pager 2 . adapter . Fragment State Adapter Ċ import Ġandroidx . view pager 2 . widget . Composite Page Transformer Ċ import Ġandroidx . view pager 2 . widget . Margin Page Transformer Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ import Ġengineer . echo . study . R Ċ import Ġengineer . echo . study . databinding . Activity Vp 2 Binding Ċ import Ġengineer . echo . study . mv vm . vp 2 . fragment . Simple Fragment Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . min Ċ Ċ class ĠV p 2 Activity Ġ: ĠAppCompatActivity (), ĠV p 2 Contract . I View Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠV p 2 Contract . I ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Vp 2 Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV p 2 ViewModel . Factory ( intent . extras , Ġapplication ) ĊĠĠĠĠĠĠĠ Ġ). get ( Vp 2 ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" æĹ¥æľ¬ ä¼ł ç»Ł èī² " ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ vp 2 ) ĊĠĠĠĠĠĠĠ Ġ( binding . view Pager . getChild At ( 0 ) Ġas ? ĠRecyclerView )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Padding ( 1 8 0 , Ġ 1 2 0 , Ġ 1 8 0 , Ġ 1 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . clip To Padding Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . view Pager . is User Input Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . view Pager . adapter Ġ= Ġobject Ġ: ĠFragment State Adapter ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= ĠDATA . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Fragment ( position : ĠInt ): ĠFragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 1 , Ġ 2 Ġ-> ĠSimple Fragment . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDATA [ position ]. first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDATA [ position ]. second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠFragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . view Pager . orientation Ġ= ĠView Pager 2 . OR IENTATION _ HORIZONTAL ĊĠĠĠĠĠĠĠ Ġbinding . view Pager . setCurrent Item ( DATA . size Ġ- Ġ 2 , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . view Pager . set Page Transformer ( Composite Page Transformer (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Transformer ( Margin Page Transformer ( 6 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Transformer ( Card Page Transformer ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠ ĠTab Layout Mediator ( binding . tab Layout , Ġbinding . view Pager ) Ġ{ Ġtab : ĠTab Layout . Tab , Ġi : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab . text Ġ= ĠDATA [ i ]. first ĊĠĠĠĠĠĠĠ Ġ}. attach () ĊĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ Vp 2 Activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġthis @ Vp 2 Activity ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġthis @ Vp 2 Activity . viewModel ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠCard Page Transformer Ġ: ĠView Pager 2 . Page Transformer Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtransform Page ( page : ĠView , Ġposition : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabs Pos Ġ= Ġabs ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ( 1 . 0 f Ġ- Ġabs Pos Ġ* Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ratio Ġ= Ġ( 1 . 0 f Ġ- Ġabs Pos Ġ* Ġ 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġalpha Ratio ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtoast ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Hello ĠEasy MV VM .${ view . java Class . simple Name }", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATA Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ç´ł é¼ ł " Ġto ĠColor . parse Color ("# 7 8 7 D 7 B "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" èĥ ¡ æ¡ ĥ " Ġto ĠColor . parse Color ("# 9 4 7 A 6 D "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" èĢģ ç« ¹ " Ġto ĠColor . parse Color ("# 6 A 8 3 7 2 ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ@ Binding Adapter (" easy Job Data ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġon Bind Job ( textView : ĠTextView , Ġjob : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġif Ġ( job Ġ!= Ġnull ) Ġ" Easy Job Ġ$ job " Ġelse Ġ" Easy ĠMV VM " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġgoto ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( activity , ĠV p 2 Activity :: class . java ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ