package Ġcom . pe ce o q ick a . demo . wheel ayout manager Ċ Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . databinding . Observable ArrayList Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġcom . pe ce o q ick a . demo . wheel ayout manager . databinding . Activity Main Binding Ċ import Ġcom . pe ce o q ick a . demo . wheel ayout manager . index . Item Adapter Ċ import Ġcom . pe ce o q ick a . demo . wheel ayout manager . index . Item ViewModel Ċ import Ġcom . pe ce o q ick a . demo . wheel ayout manager . index . ViewModel Ċ import Ġcom . pe ce o q ick a . demo . wheel ayout manager . util . color Ċ import Ġcom . pe ce o q ick a . demo . wheel ayout manager . util . timer Ċ import Ġcom . pe ce o q ick a . wheel layout manager . Wheel LayoutManager Ċ import Ġorg . jetbrains . ank o . dim en Ċ import Ġjava . util .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbind Model : ĠViewModel ĊĠĠĠ Ġprivate Ġvar Ġcurrent Year : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcurrent Month : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcurrent Day : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġselected Max Day OfMonth : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġselected Year : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġselected Month : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġselected Day : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . set ContentView < Activity Main Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠR . layout . activity _ main ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . model Ġ= ĠViewModel (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear LayoutManager Ġ= ĠW heel LayoutManager ( 5 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Changed Listener Ġ= Ġthis @ MainActivity :: on Year Selection Changed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdragging Start Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde select Index ( year Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth LayoutManager Ġ= ĠW heel LayoutManager ( 5 , Ġtrue ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Changed Listener Ġ= Ġthis @ MainActivity :: on Month Selection Changed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdragging Start Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde select Index ( month Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday LayoutManager Ġ= ĠW heel LayoutManager ( 5 , Ġtrue ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Changed Listener Ġ= Ġthis @ MainActivity :: on Day Selection Changed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdragging Start Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde select Index ( day Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Item Decoration Ġ= ĠDate Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . hex _ ffffff ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdim en ( R . dim en . px _ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . hex _ c 6 c 6 c 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Highlight Marker Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Marker Width Ġ= Ġdim en ( R . dim en . px _ 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Marker Color Ġ= Ġcolor ( R . color . hex _ db 2 6 2 e ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Hint Text Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Ġ= ĠgetString ( R . string . year ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Right Margin Ġ= Ġdim en ( R . dim en . px _ 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Size Ġ= Ġdim en ( R . dim en . px _ 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint TextColor Ġ= Ġcolor ( R . color . hex _ db 2 6 2 e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Item Decoration Ġ= ĠDate Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . hex _ ffffff ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdim en ( R . dim en . px _ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . hex _ c 6 c 6 c 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Hint Text Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Ġ= ĠgetString ( R . string . month ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Right Margin Ġ= Ġdim en ( R . dim en . px _ 9 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Size Ġ= Ġdim en ( R . dim en . px _ 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint TextColor Ġ= Ġcolor ( R . color . hex _ db 2 6 2 e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Item Decoration Ġ= ĠDate Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . hex _ ffffff ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdim en ( R . dim en . px _ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( R . color . hex _ c 6 c 6 c 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Hint Text Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Ġ= ĠgetString ( R . string . day ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Right Margin Ġ= Ġdim en ( R . dim en . px _ 9 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Size Ġ= Ġdim en ( R . dim en . px _ 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint TextColor Ġ= Ġcolor ( R . color . hex _ db 2 6 2 e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Model Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget Date Of Today () ĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠĠĠĠĠ Ġselect Current Date () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Year Selection Changed ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Value Ġ= Ġbind Model . year Adapter ?. getValue ( position ) Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Value Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Year Ġ= Ġselected Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Day Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Index ( bind Model . year Adapter , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Model . year Display Ġ= Ġselected Year ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Month Selection Changed ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Value Ġ= Ġbind Model . month Adapter ?. getValue ( position ) Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Value Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Month Ġ= Ġselected Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Day Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Index ( bind Model . month Adapter , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Model . month Display Ġ= Ġselected Month ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Day Selection Changed ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Value Ġ= Ġbind Model . day Adapter ?. getValue ( position ) Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Value Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Day Ġ= Ġselected Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Index ( bind Model . day Adapter , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Model . day Display Ġ= Ġselected Day ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĽłä¸º å¹´ æĪĸ æľĪ åıĺåĮĸ åı¯èĥ½ äº§çĶŁ çļĦ å½ĵ æľĪ æľĢå¤§ å¤© æķ° åıĺåĮĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Day Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Max Day OfMonth Ġ= ĠgetMax Day OfMonth ( selected Year , Ġselected Month ) ĊĠĠĠĠĠĠĠ Ġif Ġ( new Max Day OfMonth Ġ> Ġselected Max Day OfMonth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Model . day Adapter ?. add Range ( selected Max Day OfMonth Ġ+ Ġ 1 , Ġnew Max Day OfMonth ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new Max Day OfMonth Ġ< Ġselected Max Day OfMonth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Max Day OfMonth Ġ= Ġselected Max Day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Model . day Adapter ?. remove Range ( new Max Day OfMonth Ġ+ Ġ 1 , Ġlast Max Day OfMonth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä¸į åºĶ ä»İ éĢĤ éħį åĻ¨ å±Ĥ éĿ¢ æĿ¥ éĩįæĸ° å®ļä½į éĢī ä¸ŃçļĦ åħĥç´ł ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġselected Max Day OfMonth Ġ= Ġnew Max Day OfMonth ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Date Of Today () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcurrent Year Ġ= Ġcalendar . get ( Calendar . YEAR ) ĊĠĠĠĠĠĠĠ Ġcurrent Month Ġ= Ġcalendar . get ( Calendar . MONTH ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġcurrent Day Ġ= Ġcalendar . get ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠĠĠĠĠ Ġprintln ("$ current Year -$ current Month -$ current Day ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetMax Day OfMonth ( year : ĠInt , Ġmonth : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcalendar . set ( year , Ġmonth Ġ- Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcalendar . get Actual Maximum ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġyear List Ġ= ĠObservable ArrayList < Item ViewModel >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ( 0 Ġuntil Ġ 1 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġcurrent Year Ġ+ Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear List . add ( Item ViewModel (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġyear ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbind Model . year Adapter Ġ= ĠItem Adapter ( year List ) ĊĠĠĠĠĠĠĠ Ġval Ġmonth List Ġ= ĠObservable ArrayList < Item ViewModel >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ( 1 .. 1 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth List . add ( Item ViewModel (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbind Model . month Adapter Ġ= ĠItem Adapter ( month List ) ĊĠĠĠĠĠĠĠ Ġval Ġday List Ġ= ĠObservable ArrayList < Item ViewModel >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ( 1 .. getMax Day OfMonth ( current Year , Ġcurrent Month ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday List . add ( Item ViewModel (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbind Model . day Adapter Ġ= ĠItem Adapter ( day List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Date ( year : ĠInt , Ġmonth : ĠInt , Ġday : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Value ( bind Model . year LayoutManager , Ġbind Model . year Adapter , Ġyear ) ĊĠĠĠĠĠĠĠ Ġselect Value ( bind Model . month LayoutManager , Ġbind Model . month Adapter , Ġmonth ) ĊĠĠĠĠĠĠĠ Ġselect Value ( bind Model . day LayoutManager , Ġbind Model . day Adapter , Ġday ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Value ( layout Manager : ĠW heel LayoutManager , Ġadapter : ĠItem Adapter ?, Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Position Ġ= Ġadapter . find Position Of ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . scrollTo Position ( target Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Current Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Max Day OfMonth Ġ= ĠgetMax Day OfMonth ( selected Year , Ġselected Month ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Date ( current Year , Ġcurrent Month , Ġcurrent Day ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Index ( adapter : ĠItem Adapter ?, Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. select Item ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġde select Index ( adapter : ĠItem Adapter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. de select Item () ĊĠĠĠ Ġ} Ċ } Ċ