package Ġdeadline . child Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Color Filter Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . support . annotation . Int Range Ċ import Ġandroid . view . animation . Accel erate Interpolator Ċ Ċ /** Ċ Ġ* Ġ@ author Ġdeadline Ċ Ġ* Ġ* Ċ Ġ* Ġ@ time Ġ 2 0 1 7 / 9 / 1 Ċ Ġ*/ Ċ Ċ open Ġclass ĠFly Arrow Drawable ( context : ĠContext ) Ġ: ĠDrawable () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Paint : ĠPaint ĊĠĠĠ Ġprivate Ġval Ġm Path : ĠPath ĊĠĠĠ Ġprivate Ġvar Ġcolor : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfactor : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġhalf Length : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġm Center X : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġm Center Y : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġvalue Animator : ĠValue Animator ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠDEF _ COLOR Ġ= ĠColor . WHITE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġhalf Length Ġ= Ġdip 2 px ( context , Ġ 1 5 f ). toFloat () ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠDEF _ COLOR ĊĊĠĠĠĠĠĠĠ Ġm Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġm Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠ Ġexecute Animation ( factor , Ġ 1 f , Ġ 2 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Down () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠ Ġexecute Animation ( factor , Ġ- 1 f , Ġ 2 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Animator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Animator !!. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Animator Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Animation ( from : ĠFloat , Ġto : ĠFloat , Ġduration : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Animator Ġ= ĠValue Animator . of Float ( from , Ġto ) ĊĠĠĠĠĠĠĠ Ġvalue Animator ?. duration Ġ= Ġduration . to Long () ĊĠĠĠĠĠĠĠ Ġvalue Animator ?. interpol ator Ġ= ĠAccel erate Interpolator () ĊĠĠĠĠĠĠĠ Ġvalue Animator ?. add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactor Ġ= Ġvalue Animator ?. animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ(( factor Ġ* Ġhalf Length ). toDouble () Ġ/ Ġ 2 . 0 Ġ/ ĠMath . sqrt ( 2 . 0 )). toInt () ĊĠĠĠĠĠĠĠ Ġm Path . reset () ĊĠĠĠĠĠĠĠ Ġm Path . moveTo ( m Center X Ġ- Ġhalf Length , Ġm Center Y Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠ Ġm Path . lineTo ( m Center X , Ġm Center Y Ġ- Ġheight ) ĊĠĠĠĠĠĠĠ Ġm Path . lineTo ( m Center X Ġ+ Ġhalf Length , Ġm Center Y Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠ Ġm Path . close () ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( m Path , Ġm Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bounds Change ( bounds : ĠRect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Bounds Change ( bounds ) ĊĠĠĠĠĠĠĠ Ġm Center X Ġ= Ġbounds . center X (). toFloat () ĊĠĠĠĠĠĠĠ Ġm Center Y Ġ= Ġbounds . center Y (). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Half Length ( half Length : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . half Length Ġ= Ġhalf Length . toFloat () ĊĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Color ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Alpha (@ Int Range ( from Ġ= Ġ 0 , Ġto Ġ= Ġ 2 5 5 ) Ġalpha : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Paint . alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Color Filter ( color Filter : ĠColor Filter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Paint . color Filter Ġ= Ġcolor Filter ĊĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Opacity (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPixel Format . TRANSL UC ENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdip 2 px ( c : ĠContext , Ġdp Value : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġc . resources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġreturn Ġ( dp Value Ġ* Ġscale Ġ+ Ġ 0 . 5 f ). toInt () ĊĠĠĠ Ġ} Ċ } Ċ