package Ġme . li 2 . android . view . button Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Anim atable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Property Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . view . animation . Linear Interpolator Ċ Ċ // Ġhttps :// github . com / ko ush ik c se / Loading Button Ċ Ċ internal Ġclass ĠCircular Animated Drawable ( color : ĠInt , Ġprivate Ġval Ġm Border Width : ĠFloat ) ĊĠĠĠ Ġ: ĠDrawable (), ĠAnim atable Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġf Bounds Ġ= ĠRect F () ĊĊĠĠĠ Ġprivate Ġvar Ġm Object Animator Sweep : ĠObject Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Object Animator Angle : ĠObject Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Mode Ap pear ing : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġm Paint : ĠPaint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Global Angle Offset : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġcurrent Global Angle : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( current Global Angle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġcurrent Global Angle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġcurrent Sweep Angle : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( current Sweep Angle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġcurrent Sweep Angle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġm Running : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġm Angle Property Ġ= Ġobject Ġ: ĠProperty < Circular Animated Drawable , ĠFloat >( Float :: class . java , Ġ" angle ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( drawable : ĠCircular Animated Drawable ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdrawable . current Global Angle ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset ( drawable : ĠCircular Animated Drawable , Ġvalue : ĠFloat ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . current Global Angle Ġ= Ġvalue Ġ?: Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Sweep Property Ġ= Ġobject Ġ: ĠProperty < Circular Animated Drawable , ĠFloat >( Float :: class . java , Ġ" arc ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( drawable : ĠCircular Animated Drawable ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdrawable . current Sweep Angle ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset ( drawable : ĠCircular Animated Drawable , Ġvalue : ĠFloat ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . current Sweep Angle Ġ= Ġvalue Ġ?: Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġm Paint . stroke Width Ġ= Ġm Border Width ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġcolor ĊĊĠĠĠĠĠĠĠ Ġsetup Animations () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstart Angle Ġ= Ġcurrent Global Angle Ġ- ĠmCurrent Global Angle Offset ĊĠĠĠĠĠĠĠ Ġvar Ġsweep Angle Ġ= Ġcurrent Sweep Angle ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Mode Ap pear ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Angle Ġ+= Ġsweep Angle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsweep Angle Ġ= Ġ 3 6 0 f Ġ- Ġsweep Angle Ġ- ĠMIN _ SW EE P _ ANGLE . toFloat () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsweep Angle Ġ+= ĠMIN _ SW EE P _ ANGLE . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( f Bounds , Ġstart Angle , Ġsweep Angle , Ġfalse , Ġm Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Alpha ( alpha : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Paint . alpha Ġ= Ġalpha ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Color Filter ( cf : ĠColor Filter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Paint . color Filter Ġ= Ġcf ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Opacity (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPixel Format . TRANSP ARENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Ap pear ingMode () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Mode Ap pear ing Ġ= Ġ! m Mode Ap pear ing ĊĠĠĠĠĠĠĠ Ġif Ġ( m Mode Ap pear ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Global Angle Offset Ġ= Ġ( m Current Global Angle Offset Ġ+ ĠMIN _ SW EE P _ ANGLE Ġ* Ġ 2 ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bounds Change ( bounds : ĠRect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Bounds Change ( bounds ) ĊĠĠĠĠĠĠĠ Ġf Bounds . left Ġ= Ġbounds . left . toFloat () Ġ+ Ġm Border Width Ġ/ Ġ 2 f Ġ+ Ġ. 5 f ĊĠĠĠĠĠĠĠ Ġf Bounds . right Ġ= Ġbounds . right . toFloat () Ġ- Ġm Border Width Ġ/ Ġ 2 f Ġ- Ġ. 5 f ĊĠĠĠĠĠĠĠ Ġf Bounds . top Ġ= Ġbounds . top . toFloat () Ġ+ Ġm Border Width Ġ/ Ġ 2 f Ġ+ Ġ. 5 f ĊĠĠĠĠĠĠĠ Ġf Bounds . bottom Ġ= Ġbounds . bottom . toFloat () Ġ- Ġm Border Width Ġ/ Ġ 2 f Ġ- Ġ. 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Animations () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Object Animator Angle Ġ= ĠObject Animator . of Float ( this , Ġm Angle Property , Ġ 3 6 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠAN GLE _ INTER POL ATOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= ĠAN GLE _ ANIM ATOR _ DURATION . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= ĠValue Animator . RE START ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠValue Animator . INF IN ITE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Object Animator Sweep Ġ= ĠObject Animator . of Float ( this , Ġm Sweep Property , Ġ 3 6 0 f Ġ- ĠMIN _ SW EE P _ ANGLE Ġ* Ġ 2 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠSW EE P _ INTER POL ATOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= ĠSW EE P _ ANIM ATOR _ DURATION . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= ĠValue Animator . RE START ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠValue Animator . INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Ap pear ingMode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Running Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Object Animator Angle ?. start () ĊĠĠĠĠĠĠĠ Ġm Object Animator Sweep ?. start () ĊĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Running Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Object Animator Angle ?. cancel () ĊĠĠĠĠĠĠĠ Ġm Object Animator Sweep ?. cancel () ĊĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Running (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Running ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAN GLE _ INTER POL ATOR Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSW EE P _ INTER POL ATOR Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAN GLE _ ANIM ATOR _ DURATION Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSW EE P _ ANIM ATOR _ DURATION Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMIN _ SW EE P _ ANGLE Ġ= Ġ 3 0 ĊĠĠĠ Ġ} Ċ Ċ } Ċ