package Ġcom . fore tree . support . emoji Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Paint . ANTI _ ALIAS _ FLAG Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Configuration Ċ import Ġandroid . view . animation . Interpolator Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġnet . lu code . hack ware . magic indicator . Navigator Helper Ċ import Ġnet . lu code . hack ware . magic indicator . abs . IP ager Navigator Ċ import Ġnet . lu code . hack ware . magic indicator . build ins . Argb Evaluator Holder Ċ import Ġnet . lu code . hack ware . magic indicator . build ins . UI Util ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsil en Ġon Ġ 1 6 / 0 8 / 2 0 1 8 Ċ Ġ*/ Ċ class ĠScale Circle Navigator ( context : ĠContext ) Ġ: ĠView ( context ), ĠIP ager Navigator , ĠNavigator Helper . On Navigator Scroll Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Min Radius : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Max Radius : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Normal Circle Color Ġ= ĠColor . LT GRAY ĊĠĠĠ Ġprivate Ġvar Ġm Selected Circle Color Ġ= ĠColor . GRAY ĊĠĠĠ Ġprivate Ġvar Ġm Circle Spacing : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Circle Count : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġm Paint Ġ= ĠPaint ( ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġval Ġm Circle Points Ġ= ĠArrayList < PointF >() ĊĠĠĠ Ġprivate Ġval Ġm Circle Radius Array Ġ= ĠSparse Array < Float >() ĊĊĠĠĠ Ġ// Ġ äºĭä»¶ åĽŀè°ĥ ĊĠĠĠ Ġprivate Ġvar Ġm Touchable : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Circle ClickListener : ĠScale Circle Navigator . On Circle ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Down X : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġm Down Y : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġm Touch S lop : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Follow Touch Ġ= Ġtrue ĠĠĠ Ġ// Ġæĺ¯åĲ¦ è·Ł éļı æīĭ æĮĩ æ»ĳ åĬ¨ ĊĠĠĠ Ġprivate Ġval Ġm Navigator Helper Ġ= ĠNavigator Helper () ĊĠĠĠ Ġprivate Ġvar Ġm Start Interpolator : ĠInterpol ator ? Ġ= ĠLinear Interpolator () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Touch S lop Ġ= ĠView Configuration . get ( context ). getS ca led Touch S lop () ĊĠĠĠĠĠĠĠ Ġm Min Radius Ġ= ĠUI Util . dip 2 px ( context , Ġ 3 . 0 ) ĊĠĠĠĠĠĠĠ Ġm Max Radius Ġ= ĠUI Util . dip 2 px ( context , Ġ 5 . 0 ) ĊĠĠĠĠĠĠĠ Ġm Circle Spacing Ġ= ĠUI Util . dip 2 px ( context , Ġ 8 . 0 ) ĊĠĠĠĠĠĠĠ Ġm Navigator Helper . set Navigator Scroll Listener ( this ) ĊĠĠĠĠĠĠĠ Ġm Navigator Helper . set Sk im Over ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( measure Width ( width Measure Spec ), Ġmeasure Height ( height Measure Spec )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Width ( width Measure Spec : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= ĠView . Measure Spec . get Mode ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠView . Measure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . EX ACT LY Ġ-> Ġresult Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . AT _ MO ST , ĠView . Measure Spec . UNSPECIFIED Ġ-> Ġresult Ġ= Ġ( m Circle Count Ġ- Ġ 1 ) Ġ* Ġm Min Radius Ġ* Ġ 2 Ġ+ Ġm Max Radius Ġ* Ġ 2 Ġ+ Ġ( m Circle Count Ġ- Ġ 1 ) Ġ* Ġm Circle Spacing Ġ+ Ġpadding Left Ġ+ Ġpadding Right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Height ( height Measure Spec : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= ĠView . Measure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠView . Measure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . EX ACT LY Ġ-> Ġresult Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . Measure Spec . AT _ MO ST , ĠView . Measure Spec . UNSPECIFIED Ġ-> Ġresult Ġ= Ġm Max Radius Ġ* Ġ 2 Ġ+ Ġpadding Top Ġ+ Ġpadding Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġm Circle Points . size ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġm Circle Points [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġm Circle Radius Array . get ( i , Ġm Min Radius . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . setColor ( Argb Evaluator Holder . eval (( radius Ġ- Ġm Min Radius ) Ġ/ Ġ( m Max Radius Ġ- Ġm Min Radius ), Ġm Normal Circle Color , Ġm Selected Circle Color )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( point . x , Ġheight Ġ/ Ġ 2 . 0 f , Ġradius , Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Circle Points () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Circle Points . clear () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Circle Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= ĠMath . round ( height Ġ/ Ġ 2 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter Spacing Ġ= Ġm Min Radius Ġ* Ġ 2 Ġ+ Ġm Circle Spacing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart X Ġ= Ġm Max Radius Ġ+ Ġpadding Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm Circle Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint F Ġ= ĠPoint F ( start X . toFloat (), Ġy . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Circle Points . add ( point F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart X Ġ+= Ġcenter Spacing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . getX () ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . getY () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . getAction ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġif Ġ( m Touchable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Down X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Down Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġif Ġ( m Circle ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( x Ġ- Ġm Down X ) Ġ<= Ġm Touch S lop Ġ&& ĠMath . abs ( y Ġ- Ġm Down Y ) Ġ<= Ġm Touch S lop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Ġ= Ġjava . lang . Float . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Circle Points . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint F Ġ= Ġm Circle Points [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= ĠMath . abs ( point F . x Ġ- Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ< Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Circle ClickListener !!. onClick ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( position : ĠInt , Ġposition Offset : ĠFloat , Ġposition Offset Pixels : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Navigator Helper . on Page Sc rolled ( position , Ġposition Offset , Ġposition Offset Pixels ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Navigator Helper . on Page Selected ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Navigator Helper . on Page Scroll StateChanged ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Circle Points () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnotify DataSet Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Circle Points () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach To Magic Indicator () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach From Magic Indicator () Ġ{} ĊĊĠĠĠ Ġfun Ġset Min Radius ( min Radius : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Min Radius Ġ= Ġmin Radius ĊĠĠĠĠĠĠĠ Ġprepare Circle Points () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Max Radius ( max Radius : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Max Radius Ġ= Ġmax Radius ĊĠĠĠĠĠĠĠ Ġprepare Circle Points () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Normal Circle Color ( normal Circle Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Normal Circle Color Ġ= Ġnormal Circle Color ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetSelected Circle Color ( selected Circle Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Selected Circle Color Ġ= Ġselected Circle Color ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Circle Spacing ( circle Spacing : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Circle Spacing Ġ= Ġcircle Spacing ĊĠĠĠĠĠĠĠ Ġprepare Circle Points () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Start Interpolator ( start Interpolator : ĠInterpol ator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Start Interpolator Ġ= Ġstart Interpolator ĊĠĠĠĠĠĠĠ Ġif Ġ( m Start Interpolator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Start Interpolator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Circle Count ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Circle Count Ġ= Ġcount Ġ Ġ// ĠæŃ¤ å¤Ħ ä¸į è°ĥçĶ¨ invalidate ï¼Į è®© å¤ĸéĥ¨ è°ĥçĶ¨ notify DataSet Changed ĊĠĠĠĠĠĠĠ Ġm Navigator Helper . total Count Ġ= Ġm Circle Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Touchable ( touch able : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Touchable Ġ= Ġtouch able ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Follow Touch ( follow Touch : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Follow Touch Ġ= Ġfollow Touch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Sk im Over ( sk im Over : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Navigator Helper . set Sk im Over ( sk im Over ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Circle ClickListener ( circle ClickListener : ĠOn Circle ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Touchable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Touchable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Circle ClickListener Ġ= Ġcircle ClickListener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Enter ( index : ĠInt , Ġtotal Count : ĠInt , Ġenter Percent : ĠFloat , Ġleft To Right : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Follow Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġm Min Radius Ġ+ Ġ( m Max Radius Ġ- Ġm Min Radius ) Ġ* Ġm Start Interpolator !!. get Interpolation ( enter Percent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Circle Radius Array . put ( index , Ġradius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Leave ( index : ĠInt , Ġtotal Count : ĠInt , Ġleave Percent : ĠFloat , Ġleft To Right : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Follow Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġm Max Radius Ġ+ Ġ( m Min Radius Ġ- Ġm Max Radius ) Ġ* Ġm Start Interpolator !!. get Interpolation ( leave Percent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Circle Radius Array . put ( index , Ġradius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Selected ( index : ĠInt , Ġtotal Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Follow Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Circle Radius Array . put ( index , Ġm Max Radius . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon De selected ( index : ĠInt , Ġtotal Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Follow Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Circle Radius Array . put ( index , Ġm Min Radius . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Circle ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonClick ( index : ĠInt ) ĊĠĠĠ Ġ} Ċ }