package Ġcom . sup . dev . android . views . support . animation Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġcom . sup . dev . java . classes . animation . Animation P end ulum Ċ import Ġcom . sup . dev . java . classes . animation . Animation P end ulum Color Ċ import Ġcom . sup . dev . java . classes . animation . Animation Spring Color ĊĊ Ċ class ĠAnimation Focus ( private Ġval Ġview : ĠView , Ġprivate Ġval Ġfocus Color Click : ĠInt ) Ġ: ĠView . On Touch Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġanimation Focus : ĠAnimation Spring Color ĊĠĠĠ Ġprivate Ġval Ġanimation Click : ĠAnimation P end ulum Color ĊĠĠĠ Ġprivate Ġval Ġfocus Color : ĠInt Ġ= ĠColor . arg b (( Color . alpha ( focus Color Click ) Ġ/ Ġ 1 . 5 f ). toInt (), ĠColor . red ( focus Color Click ), ĠColor . green ( focus Color Click ), ĠColor . blue ( focus Color Click )) ĊĠĠĠ Ġprivate Ġval Ġfocus Color Alpha : ĠInt Ġ= ĠColor . arg b ( 0 , ĠColor . red ( focus Color Click ), ĠColor . green ( focus Color Click ), ĠColor . blue ( focus Color Click )) ĊĊĠĠĠ Ġprivate Ġvar Ġon Tou ched : Ġ( Boolean )-> Unit Ġ= Ġ{} ĊĠĠĠ Ġprivate Ġvar Ġtouched : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġanimation Focus Ġ= ĠAnimation Spring Color ( focus Color Alpha , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġanimation Click Ġ= ĠAnimation P end ulum Color ( focus Color Alpha , Ġfocus Color Alpha , Ġfocus Color Click , Ġ 1 5 0 , ĠAnimation P end ulum . Animation Type . TO _ 2 _ AND _ BACK ) ĊĊĠĠĠĠĠĠĠ Ġreset On Focus Changed Listener () ĊĠĠĠĠĠĠĠ Ġreset Touch Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Touch Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġview . setOn Touch Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset On Focus Changed Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġview . setOn Focus ChangeListener Ġ{ Ġ_, Ġ_ Ġ-> Ġupdate Focus Color () Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Touch ( view : ĠView , Ġevent : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! view . isEnabled Ġ|| Ġ! view . is Clickable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouched Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Focus Color () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview . on Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouched Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Focus Color () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP Ġ&& Ġevent . x Ġ>= Ġ 0 Ġ&& Ġevent . x Ġ<= Ġview . width Ġ&& Ġevent . y Ġ>= Ġ 0 Ġ&& Ġevent . y Ġ<= Ġview . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Click . set ( animation Focus . getColor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Click . to _ 2 () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP Ġ|| Ġevent . action Ġ== ĠMotion Event . ACTION _ CANCEL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġevent . x Ġ< Ġ 0 Ġ|| Ġevent . x Ġ> Ġview . width Ġ|| Ġevent . y Ġ< Ġ 0 Ġ|| Ġevent . y Ġ> Ġview . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtouched Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Focus Color () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . on Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġupdate Focus Color () Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation Focus . to ( if Ġ( view . is Focused Ġ|| Ġtouched ) Ġfocus Color Ġelse Ġfocus Color Alpha ) ĊĠĠĠĠĠĠĠ Ġview . invalidate () ĊĠĠĠĠĠĠĠ Ġon Tou ched . invoke ( touched ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate (): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġanimation Focus . update () ĊĠĠĠĠĠĠĠ Ġanimation Click . update () ĊĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġif Ġ( animation Click . a . value Ġ> Ġanimation Focus . a . value ) Ġanimation Click . color Ġelse Ġanimation Focus . getColor () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( animation Focus . is Need Update () Ġ|| Ġanimation Click . is Need Update ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . invalidate () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Click Animation Enabled ( b : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Click . set ( focus Color Alpha , Ġfocus Color Click ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Click . set ( 0 x 0 0 0 0 0 0 0 0 , Ġ 0 x 0 0 0 0 0 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Tou ched ( on Tou ched : Ġ( Boolean )-> Unit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Tou ched Ġ= Ġon Tou ched ĊĠĠĠ Ġ} Ċ } Ċ