package Ġcom . in z . z . note _ book . view . widget Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Message Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Int Def Ċ import Ġandroidx . appcompat . widget . Tint Typed Array Ċ import Ġcom . in z . z . note _ book . R Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ /** Ċ Ġ* Ġ åĢĴ è®¡ æĹ¶ Ġ è¿Ľ åº¦ Ċ Ġ* Ġ@ author ĠZ h eng lj Ċ Ġ* Ġ@ version Ġ 1 . 0 . 0 Ċ Ġ* ĠCreate Ġby Ġin z Ġin Ġ 2 0 2 0 / 0 8 / 2 6 Ġ 0 9 : 0 3 . Ċ Ġ*/ Ċ class ĠCount down Ring View Ġ: ĠView Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMODE _ COUNT _ TIME _ SECOND Ġ= Ġ 0 x 0 0 EE AA 0 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMODE _ COUNT _ TIME _ FIXED Ġ= Ġ 0 x 0 0 EE AA 0 2 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ BASE _ FORMAT Ġ= Ġ"% d .% 0 2 d " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ MINUTE _ FORMAT Ġ= Ġ"% d :% 0 2 d .% 0 2 d " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ HOUR _ FORMAT Ġ= Ġ"% d :% 0 2 d :% 0 2 d .% 0 2 d " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME _ MODEL _ TEXT Ġ= Ġ" 0 0 0 0 : 0 0 : 0 0 . 0 0 " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ SHOW _ SECOND Ġ= Ġ 6 0 ĊĊĊĠĠĠĠĠĠĠ Ġvar Ġprogress Color : ĠInt Ġ= ĠColor . GREEN ĊĠĠĠĠĠĠĠ Ġvar Ġprogress Width Ġ= Ġ 2 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcount down TextColor : ĠInt Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġvar ĠbackgroundColor : ĠInt Ġ= ĠColor . LT GRAY ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Int Def ( MODE _ COUNT _ TIME _ SECOND , ĠMODE _ COUNT _ TIME _ FIXED ) ĊĠĠĠ Ġ@ Retention ( Annotation Retention . SOURCE ) ĊĠĠĠ Ġannotation Ġclass ĠCount down Mode ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĢĴ è®¡ æĹ¶ æ¨¡å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Count down Mode ĊĠĠĠ Ġprivate Ġvar Ġcount down Mode : ĠInt Ġ= ĠMODE _ COUNT _ TIME _ SECOND ĊĊĠĠĠ Ġprivate Ġvar Ġcount down Time Ġ= Ġ 6 0 F ĊĠĠĠ Ġprivate Ġvar ĠcurrentTime Ġ= Ġ 0 F ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĽºå®ļ æĹ¶éĹ´ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġfixed Time Ġ= Ġ 0 L ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĽºå®ļ å¼Ģå§ĭ æĹ¶éĹ´ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġfixed StartTime Ġ= Ġ 1 0 0 L ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ çĬ¶æĢģ Ġ ï¼ļ Ġé»ĺè®¤ æľª å¼Ģå§ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġstart State Ġ= ĠAtomic Boolean ( false ) ĊĊĠĠĠ Ġprivate Ġvar ĠmContext : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbackground Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprogress Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsecond Progress Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcount down Text Paint : ĠPaint ĊĊĠĠĠ Ġprivate Ġvar Ġring Rect F : ĠRect F ĊĠĠĠ Ġprivate Ġvar Ġtext Rect : ĠRect ĊĊĠĠĠ Ġprivate Ġvar Ġtext Size Ġ= Ġ 0 F ĊĊĠĠĠ Ġprivate Ġvar Ġprogress Handler : ĠHandler ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġinit Point () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġinit Style ( attrs ) ĊĠĠĠĠĠĠĠ Ġinit Point () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġprivate Ġfun Ġinit Style ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠT int Typed Array . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Count down Ring View , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġarray . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Count down Ring View _ countdown _ background _ color , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . LT GRAY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprogress Color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . getColor ( R . style able . Count down Ring View _ countdown _ progress _ color , ĠColor . GREEN ) ĊĠĠĠĠĠĠĠ Ġprogress Width Ġ= Ġarray . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Count down Ring View _ countdown _ progress _ width , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcount down TextColor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . getColor ( R . style able . Count down Ring View _ countdown _ text _ color , ĠColor . BLACK ) ĊĊĠĠĠĠĠĠĠ Ġarray . recycle () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Handler Ġ= ĠHandler ( Progress Handler Callback ()) ĊĠĠĠĠĠĠĠ Ġring Rect F Ġ= ĠRect F () ĊĠĠĠĠĠĠĠ Ġtext Rect Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( countdown Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ COUNT _ TIME _ SECOND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( countdown Time Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= Ġcount down Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ COUNT _ TIME _ FIXED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalibration Fix D if Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æł¡ åĩĨ å½ĵåīį ä¸İ ç³»ç»Ł æĹ¶éĹ´ å·® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcalibration Fix D if Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent DateTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġdif Ġ= Ġ( fixed Time Ġ- Ġcurrent DateTime ) Ġ/ Ġ 1 0 0 0 F ĊĠĠĠĠĠĠĠ Ġif Ġ( dif Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= Ġdif ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġinit Point () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbackground Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġbackground Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠbackgroundColor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprogress Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġprogress Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Cap Ġ= ĠPaint . Cap . ROUND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġprogress Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsecond Progress Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġsecond Progress Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . LT GRAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Cap Ġ= ĠPaint . Cap . ROUND ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcount down Text Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġcount down Text Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 5 6 F ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġprogress Handler . remove Callbacks And Messages ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠMath . min ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( size , Ġsize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġon Draw Progress ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Draw Progress ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Us able Ġ= Ġwidth Ġ- Ġpadding Start Ġ- Ġpadding End ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Us able Ġ= Ġheight Ġ- Ġpadding Top Ġ- Ġpadding Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter X Ġ= Ġpadding Start Ġ+ Ġwidth Us able Ġ/ Ġ 2 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter Y Ġ= Ġpadding Top Ġ+ Ġheight Us able Ġ/ Ġ 2 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠMath . min ( width Us able Ġ/ Ġ 2 F , Ġheight Us able Ġ/ Ġ 2 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġring Rect F . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġpadding Start Ġ+ Ġprogress Width Ġ/ Ġ 2 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġpadding Top Ġ+ Ġprogress Width Ġ/ Ġ 2 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġpadding Start Ġ+ Ġsize Ġ* Ġ 2 Ġ- Ġprogress Width Ġ/ Ġ 2 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġpadding Top Ġ+ Ġsize Ġ* Ġ 2 Ġ- Ġprogress Width Ġ/ Ġ 2 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Paint . stroke Width Ġ= Ġprogress Width Ġ+ Ġ 8 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Paint . color Ġ= ĠbackgroundColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw Circle ( center X , Ġcenter Y , Ġsize Ġ- Ġprogress Width Ġ/ Ġ 2 F , Ġbackground Paint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( countdown Time Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsweep Angle Ġ= Ġget Progress Angle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sweep Angle Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Paint . stroke Width Ġ= Ġprogress Width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Paint . color Ġ= Ġprogress Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw Arc ( ring Rect F , Ġ- 9 0 F , Ġsweep Angle , Ġfalse , Ġprogress Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw Center Text ( it , Ġcenter X , Ġcenter Y , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentTime Ġ<= Ġ 0 F ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. count Finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Handler . send Empty Message Delayed ( HANDLER _ COUNT _ DOWN _ START , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è¿Ľ åº¦ æĿ¡ æĹ ĭ è½¬ è§Ĵ åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Progress Angle (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( countdown Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ COUNT _ TIME _ SECOND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠcurrentTime Ġ* Ġ 3 6 0 F Ġ/ Ġcount down Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ COUNT _ TIME _ FIXED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠcurrentTime Ġ* Ġ 3 6 0 F Ġ/ Ġfixed StartTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 3 6 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Draw Center Text ( canvas : ĠCanvas , Ġcenter X : ĠFloat , Ġcenter Y : ĠFloat , Ġsize : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Str Ġ= ĠgetTime Format Str () ĊĠĠĠĠĠĠĠ Ġif Ġ( text Size Ġ== Ġ 0 F ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Text Size ( size , Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcount down Text Paint . color Ġ= Ġcount down TextColor ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Int Ġ= Ġcount down Text Paint . font Metrics Int ĊĠĠĠĠĠĠĠ Ġval Ġc Y Ġ= Ġcenter Y Ġ- Ġ( metrics Int . top Ġ+ Ġmetrics Int . bottom ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġcanvas . draw Text ( time Str , Ġcenter X , Ġc Y , Ġcount down Text Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĸĩåŃĹ å¤§å°ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġreset Text Size ( text Size : ĠFloat , Ġsize : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcount down Text Paint . text Size Ġ= Ġtext Size ĊĠĠĠĠĠĠĠ Ġcount down Text Paint . getText Bounds ( TIME _ MODEL _ TEXT , Ġ 0 , ĠTIME _ MODEL _ TEXT . length , Ġtext Rect ) ĊĠĠĠĠĠĠĠ Ġif Ġ( text Rect . width () Ġ> Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Text Size ( text Size Ġ- Ġ 8 F , Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text Size Ġ= Ġtext Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æł¼å¼ı åĮĸ Ġ åĲİçļĦ æĹ¶éĹ´ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetTime Format Str (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsecond Time Ġ= Ġ( currentTime ). toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġmill Time Ġ= Ġ(( currentTime Ġ- Ġsecond Time ) Ġ% Ġ 1 Ġ* Ġ 1 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( mill Time Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmill Time Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( second Time Ġ< ĠMAX _ SHOW _ SECOND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTIME _ BASE _ FORMAT . format ( second Time , Ġmill Time ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmins Ġ= Ġsecond Time Ġ/ Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġsecond Time Ġ- Ġmins Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mins Ġ<= ĠMAX _ SHOW _ SECOND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTIME _ MINUTE _ FORMAT . format ( mins , Ġseconds , Ġmill Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġmins Ġ/ Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmins Ġ= Ġmins Ġ- Ġhour Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTIME _ HOUR _ FORMAT . format ( hour , Ġmins , Ġseconds , Ġmill Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠHAND LER _ COUNT _ DOWN _ START Ġ= Ġ 0 x 0 E FA 0 0 0 1 ĊĊĠĠĠ Ġinner Ġclass ĠProgress Handler Callback Ġ: ĠHandler . Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( msg . what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHAND LER _ COUNT _ DOWN _ START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start State . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( countdown Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ COUNT _ TIME _ SECOND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ-= Ġ 1 Ġ/ Ġ 1 0 0 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ COUNT _ TIME _ FIXED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalibration Fix D if Time () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. count Down ( currentTime ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĠĠĠ Ġ// ĠOPEN ĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĢĴ è®¡ æĹ¶ çĽĳåĲ¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠCount down View Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĢĴ è®¡ æĹ¶ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠcurrentTime Ġ åī © ä½Ļ æĹ¶éĹ´ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcount Down ( currentTime : ĠFloat ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĢĴ è®¡ æĹ¶ ç»ĵæĿŁ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcount Finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġlistener : ĠCount down View Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ åĢĴ è®¡ æĹ¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart (@ Count down Mode Ġcount down Mode : ĠInt , Ġtime : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( time Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" time Ġcon 't Ġlt Ġor Ġequals Ġ 0 . Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . countdown Mode Ġ= Ġcount down Mode ĊĠĠĠĠĠĠĠ Ġwhen Ġ( countdown Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ COUNT _ TIME _ SECOND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount down Time Ġ= Ġtime . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( countdown Time Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= Ġcount down Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ COUNT _ TIME _ FIXED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Time Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixed StartTime Ġ= Ġ( time Ġ- ĠSystem . currentTimeMillis ()) Ġ/ Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalibration Fix D if Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstart State . set ( true ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart State . set ( true ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åģľæŃ¢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart State . set ( false ) ĊĠĠĠ Ġ} Ċ }