package Ġcom . l zf . easy float . example . widget Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġcom . l zf . easy float . example . R Ċ import Ġcom . l zf . easy float . utils . Display Utils Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . min Ċ import Ġkotlin . math . sin Ċ Ċ /** Ċ Ġ* Ġ@ author : Ġli u zh en f eng Ċ Ġ* Ġ@ date : Ġ 1 2 / 2 4 / 2 0 ĠĠ 1 2 : 2 0 Ċ Ġ* Ġ@ Package : Ġcom . l zf . easy float . example . widget Ċ Ġ* Ġ@ Description : Ċ Ġ*/ Ċ class ĠCircle Loading View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġ// Ġ çİ¯ å½¢ åľĨ çĤ¹ çļĦ çĽ¸åħ³ å±ŀæĢ§ ĊĠĠĠ Ġprivate Ġvar Ġdot Radius Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdot PI Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdot Rotate PI Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdot Rotate Standard Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdot Real Rotate PI Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdot Paint : ĠPaint ĊĊĠĠĠ Ġ// Ġ åľĨ å¼ § çļĦ çĽ¸åħ³ å±ŀæĢ§ ĊĠĠĠ Ġprivate Ġvar Ġarc Radius Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġstart Angle Ġ= Ġ- 3 0 f ĊĠĠĠ Ġprivate Ġvar Ġsweep Angle Ġ= Ġ 2 4 0 f ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarc Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrect F : ĠRect F ĊĊĠĠĠ Ġ// Ġåı¯ èĩªå®ļä¹ī çļĦ å±ŀæĢ§ ĊĠĠĠ Ġprivate Ġvar Ġarc Width Ġ= Ġdp 2 px ( context , Ġ 2 f ) ĊĠĠĠ Ġprivate Ġvar Ġloading Color Ġ= ĠColor . WHITE ĊĠĠĠ Ġprivate Ġvar Ġdot Size Ġ= Ġ 1 6 ĊĠĠĠ Ġprivate Ġvar Ġduration Time Ġ= Ġ 1 5 0 0 L ĊĠĠĠ Ġ// Ġ åľĨ çĤ¹ æ¯ı åĳ¨æľŁ æĹ ĭ è½¬ è§Ĵ åº¦ ĊĠĠĠ Ġprivate Ġvar Ġdot Angle Ġ= Ġ 9 0 f ĊĊĠĠĠ Ġprivate Ġvar Ġcent X Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcent Y Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġanim ator Value Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġanim ator : ĠValue Animator ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġattrs ?. apply Ġ{ Ġinit Attrs ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġinit Value () ĊĠĠĠĠĠĠĠ Ġinit Paint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Attrs ( attrs : ĠAttributeSet ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Circle Loading View , Ġ 0 , Ġ 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarc Width Ġ= Ġget Dimension ( R . style able . Circle Loading View _ arc Width , Ġarc Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Color Ġ= Ġget Color ( R . style able . Circle Loading View _ loading Color , Ġloading Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Size Ġ= Ġget Int ( R . style able . Circle Loading View _ dot Size , Ġdot Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Time Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Float ( R . style able . Circle Loading View _ duration Time , Ġduration Time . toFloat ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Angle Ġ= Ġget Float ( R . style able . Circle Loading View _ dot Angle , Ġdot Angle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. recycle () ĊĊĠĠĠ Ġprivate Ġfun Ġinit Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġdot PI Ġ= ĠMath . PI . toFloat () Ġ* Ġ 2 Ġ/ Ġdot Size ĊĠĠĠĠĠĠĠ Ġdot Radius Ġ= Ġarc Width Ġ* Ġ 0 . 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Paint () Ġ{ ĊĠĠĠĠĠĠĠ Ġdot Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġloading Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġarc Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġloading Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Cap Ġ= ĠPaint . Cap . ROUND ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġarc Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġinit Animator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġanim ator ?. cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Animator () Ġ{ ĊĠĠĠĠĠĠĠ Ġanim ator Ġ= ĠValue Animator . of Float ( 0 f , Ġ 1 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġduration Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĮ Ģ éĢŁ è¿Ĳ åĬ¨ ï¼Į åľĨ å¼ § åįķ çĭ¬ è®¡ç®Ĺ æıĴ åĢ¼ åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Value Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®¡ç®Ĺ çİ¯ å½¢ åľĨ çĤ¹ çļĦ æĹ ĭ è½¬ è§Ĵ åº¦ ï¼Į åĨį è½¬ æĪĲ åľĨ åĳ¨ çİĩ æł¼å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Rotate PI Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( dot Rotate Standard Ġ+ Ġdot Angle Ġ* Ġanim ator Value ) Ġ/ Ġ 1 8 0 f Ġ* ĠMath . PI . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġä¸º åľĨ å¼ § è®¾ç½® æıĴ åĢ¼ åĻ¨ ï¼Į è®¡ç®Ĺ éĢ»è¾ĳ åĴĮ è®¾ç½® åĬ¨çĶ» æıĴ åĢ¼ åĻ¨ çĽ¸åĲĮ ï¼Į è¿ĻéĩĮ ä¸ºäºĨ èĥ½ åĴĮ çİ¯ å½¢ åľĨ çĤ¹ åħ± çĶ¨ ä¸Ģä¸ª åĬ¨çĶ» ï¼Į è®¡ç®Ĺ ç§» åĪ° åĨħéĥ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Value Ġ= Ġget Interpolation ( anim ator Value ) Ġ* Ġ 1 2 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anim ator Value Ġ<= Ġ 6 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Angle Ġ= Ġ- 3 0 f Ġ+ Ġanim ator Value Ġ* Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsweep Angle Ġ= Ġ 2 4 0 f Ġ- Ġanim ator Value Ġ* Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Angle Ġ= Ġanim ator Value Ġ- Ġ 1 5 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsweep Angle Ġ= Ġ( anim ator Value Ġ- Ġ 6 0 f ) Ġ* Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Rotate Standard Ġ+= Ġdot Angle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dot Rotate Standard Ġ>= Ġ 3 6 0 f ) Ġdot Rotate Standard Ġ-= Ġ 3 6 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( p 0 : ĠAn imator ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( p 0 : ĠAn imator ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( p 0 : ĠAn imator ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Interpolation ( t : ĠFloat ) Ġ= Ġif Ġ( t Ġ> Ġ 0 . 5 f ) Ġ 1 Ġ- Ġ 2 Ġ* Ġ( 1 Ġ- Ġt ) Ġ* Ġt Ġelse Ġ 2 Ġ* Ġ( 1 Ġ- Ġt ) Ġ* Ġt ĊĊĠĠĠ Ġ@ Suppress Lint (" Draw Allocation ") ĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġget Measure Size ( width Measure Spec , Ġdp 2 px Int ( context , Ġ 1 2 0 f )) ĊĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġget Measure Size ( height Measure Spec , Ġdp 2 px Int ( context , Ġ 1 2 0 f )) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġheight ) ĊĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth Ġ- Ġpadding Left Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight Ġ- Ġpadding Top Ġ- Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġcent X Ġ= Ġwidth . shr ( 1 ) Ġ+ Ġpadding Left ĊĠĠĠĠĠĠĠ Ġcent Y Ġ= Ġheight . shr ( 1 ) Ġ+ Ġpadding Top ĊĠĠĠĠĠĠĠ Ġarc Radius Ġ= Ġ( min ( width , Ġheight ) Ġ- Ġarc Width ) Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġrect F Ġ= ĠRect F ( cent X Ġ- Ġarc Radius , Ġcent Y Ġ- Ġarc Radius , Ġcent X Ġ+ Ġarc Radius , Ġcent Y Ġ+ Ġarc Radius ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Measure Size ( measure Spec : ĠInt , Ġdefault Size : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspec Mode Ġ= ĠMeasure Spec . get Mode ( measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġspec Size Ġ= ĠMeasure Spec . getSize ( measure Spec ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( spec Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç¡® åĪĩ å¤§å°ı ï¼Į æīĢä»¥ å°Ĩ å¾ĹåĪ° çļĦ å° º å¯ ¸ ç»Ļ view ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . EX ACT LY Ġ-> Ġspec Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġé»ĺè®¤ åĢ¼ä¸º Ġxxx Ġpx ï¼Į æŃ¤ å¤Ħ è¦ģ ç»ĵ åĲĪ çĪ¶ æİ§ä»¶ ç»Ļ åŃĲ æİ§ä»¶ çļĦ æľĢ å¤ļ å¤§å°ı ( è¦ģ ä¸į çĦ¶ ä¼ļ å¡« åħħ çĪ¶ æİ§ä»¶ )ï¼Į æīĢä»¥ éĩĩçĶ¨ æľĢå°ı åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . AT _ MO ST Ġ-> Ġmin ( default Size , Ġspec Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdefault Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. dot Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Real Rotate PI Ġ= Ġi Ġ* Ġdot PI Ġ+ Ġdot Rotate PI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarc Radius Ġ* Ġcos ( dot Real Rotate PI ) Ġ+ Ġcent X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarc Radius Ġ* Ġsin ( dot Real Rotate PI ) Ġ+ Ġcent Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Radius , Ġdot Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Arc ( rect F , Ġstart Angle , Ġsweep Angle , Ġfalse , Ġarc Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġdp 2 px ( context : ĠContext , Ġdp Val : ĠFloat ) Ġ= ĠDisplay Utils . dp 2 px ( context , Ġdp Val ). toFloat () Ċ Ċ fun Ġdp 2 px Int ( context : ĠContext , Ġdp Val : ĠFloat ): ĠInt Ġ= ĠDisplay Utils . dp 2 px ( context , Ġdp Val ) Ċ