package Ġcom . ke . cam er ali brary Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . os . Count Down Timer Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ Ċ import Ġcom . ke . cam er ali brary . listener . Capture Listener Ċ import Ġcom . ke . cam er ali brary . util . Check Permission Ċ import Ġcom . ke . cam er ali brary . util . Log Util Ċ Ċ import Ġcom . ke . cam er ali brary . J Camera View . Companion . BUTTON _ STATE _ BOTH Ċ import Ġcom . ke . cam er ali brary . J Camera View . Companion . BUTTON _ STATE _ ONLY _ CAPTURE Ċ import Ġcom . ke . cam er ali brary . J Camera View . Companion . BUTTON _ STATE _ ONLY _ REC ORDER Ċ Ċ class ĠCapture Button : ĠView Ġ{ ĊĊĠ Ġprivate Ġvar Ġstate : ĠInt Ġ= Ġ 0 ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å½ĵåīį æĮīéĴ® çĬ¶æĢģ ĊĠ Ġprivate Ġvar Ġbutton _ state : ĠInt Ġ= Ġ 0 ĠĠĠĠĠĠ Ġ// æĮīéĴ® åı¯ æī§è¡Į çļĦ åĬŁèĥ½ çĬ¶æĢģ ï¼Ī æĭ į çħ§ , å½ķ åĪ¶ , ä¸¤ èĢħ ï¼ī ĊĊĠ Ġprivate Ġval Ġprogress _ color Ġ= ĠR . color . cam er av iew _ circle _ re coder _ progress ĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿Ľ åº¦ æĿ¡ é¢ľèī² ĊĠ Ġprivate Ġval Ġoutside _ color Ġ= ĠR . color . cam er av iew _ circle _ re coder _ out ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¤ĸ åľĨ èĥĮæĻ¯ èī² ĊĠ Ġprivate Ġval Ġinside _ color Ġ= ĠR . color . cam er av iew _ circle _ re coder _ in ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĨħ åľĨ èĥĮæĻ¯ èī² ĊĊĠ Ġprivate Ġvar Ġevent _ Y : ĠFloat Ġ= Ġ 0 . toFloat () Ġ Ġ// Touch _ Event _ Down æĹ¶åĢĻ è®°å½ķ çļĦ Y åĢ¼ ĊĊĠ Ġprivate Ġlateinit Ġvar Ġm Paint : ĠPaint ĊĊĠ Ġprivate Ġvar ĠstrokeWidth : ĠFloat Ġ Ġ= Ġ 0 f ĠĠĠĠĠĠĠĠ Ġ// è¿Ľ åº¦ æĿ¡ å®½åº¦ ĊĠ Ġprivate Ġvar Ġoutside _ add _ size : ĠInt Ġ= Ġ 0 ĠĠĠĠĠĠ Ġ// éķ¿ æĮī å¤ĸ åľĨ åįĬ å¾Ħ åıĺ å¤§çļĦ Size ĊĠ Ġprivate Ġvar Ġinside _ reduce _ size : ĠInt Ġ Ġ= Ġ 0 ĠĠĠ Ġ// éķ¿ å®ī åĨħ åľĨ ç¼© å°ı çļĦ Size ĊĊĠ Ġ// ä¸Ńå¿ĥ åĿĲæłĩ ĊĠ Ġprivate Ġvar Ġcenter _ X : ĠFloat Ġ= Ġ 0 f ĊĠ Ġprivate Ġvar Ġcenter _ Y : ĠFloat Ġ= Ġ 0 f ĊĊĠ Ġprivate Ġvar Ġbutton _ radius : ĠFloat Ġ Ġ= Ġ 0 f ĠĠĠĠĠĠĠĠĠĠ Ġ// æĮīéĴ® åįĬ å¾Ħ ĊĠ Ġprivate Ġvar Ġbutton _ outside _ radius : ĠFloat Ġ Ġ= Ġ 0 f ĠĠĠĠ Ġ// å¤ĸ åľĨ åįĬ å¾Ħ ĊĠ Ġprivate Ġvar Ġbutton _ inside _ radius : ĠFloat Ġ Ġ= Ġ 0 f ĠĠĠĠĠ Ġ// åĨħ åľĨ åįĬ å¾Ħ ĊĠ Ġprivate Ġvar Ġbutton _ size : ĠInt Ġ= Ġ 0 ĠĠĠĠĠĠĠĠĠ Ġ// æĮīéĴ® å¤§å°ı ĊĊĠ Ġprivate Ġvar Ġprogress : ĠFloat Ġ= Ġ 0 f ĠĠĠĠĠĠĠ Ġ// å½ķ åĪ¶ è§Ĩé¢ĳ çļĦ è¿Ľ åº¦ ĊĠ Ġprivate Ġvar Ġduration : ĠInt Ġ= Ġ 0 ĠĠĠĠĠĠĠĠĠĠ Ġ// å½ķ åĪ¶ è§Ĩé¢ĳ æľĢå¤§ æĹ¶éĹ´ éķ¿åº¦ ĊĠ Ġprivate Ġvar Ġmin _ duration : ĠInt Ġ= Ġ 0 ĠĠĠĠĠĠ Ġ// æľĢ çŁŃ å½ķ åĪ¶ æĹ¶éĹ´ éĻĲåĪ¶ ĊĠ Ġprivate Ġvar Ġrecorded _ time : ĠInt Ġ= Ġ 0 ĠĠĠĠĠ Ġ// è®°å½ķ å½ĵåīį å½ķ åĪ¶ çļĦæĹ¶éĹ´ ĊĊĠ Ġprivate Ġvar Ġrect F : ĠRect F ? Ġ= Ġnull ĊĊĠ Ġprivate Ġvar Ġlong Press Runnable : ĠLong Press Runnable Ġ? Ġ= Ġnull ĠĠ Ġ// éķ¿ æĮī åĲİ å¤ĦçĲĨ çļĦ éĢ»è¾ĳ Runnable ĊĠ Ġprivate Ġvar Ġcapture L is enter : ĠCapture Listener ? Ġ= Ġnull ĠĠĠĠĠĠĠ Ġ// æĮīéĴ® åĽŀè°ĥ æİ¥åı£ ĊĠ Ġprivate Ġvar Ġtimer : ĠRecord Count Down Timer ? Ġ= Ġnull ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¡ æĹ¶ åĻ¨ ĊĊĠ Ġ// æĺ¯åĲ¦ ç©º éĹ ² çĬ¶æĢģ ĊĠ Ġval Ġis Idle : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġif Ġ( state Ġ== ĠSTATE _ IDLE ) Ġtrue Ġelse Ġfalse ĊĊĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{} ĊĊĠ Ġconstructor ( context : ĠContext , Ġsize : ĠInt ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠ Ġthis . button _ size Ġ= Ġsize ĊĠĠĠ Ġbutton _ radius Ġ= Ġsize Ġ/ Ġ 2 . 0 f ĊĊĠĠĠ Ġbutton _ outside _ radius Ġ= Ġbutton _ radius ĊĠĠĠ Ġbutton _ inside _ radius Ġ= Ġbutton _ radius Ġ* Ġ 0 . 7 5 f ĊĊĠĠĠ ĠstrokeWidth Ġ= Ġ( size Ġ/ Ġ 1 5 ). toFloat () ĊĠĠĠ Ġoutside _ add _ size Ġ= Ġsize Ġ/ Ġ 5 ĊĠĠĠ Ġinside _ reduce _ size Ġ= Ġsize Ġ/ Ġ 8 ĊĊĠĠĠ Ġm Paint Ġ= ĠPaint () ĊĠĠĠ Ġm Paint . is Anti Alias Ġ= Ġtrue ĊĊĠĠĠ Ġprogress Ġ= Ġ 0 f ĊĠĠĠ Ġlong Press Runnable Ġ= ĠLong Press Runnable () ĊĊĠĠĠ Ġstate Ġ= ĠSTATE _ IDLE ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ ä¸ºç©º éĹ ² çĬ¶æĢģ ĊĠĠĠ Ġbutton _ state Ġ= ĠBUTTON _ STATE _ BOTH Ġ Ġ// åĪĿå§ĭåĮĸ æĮīéĴ® ä¸º åı¯ å½ķ åĪ¶ åı¯ æĭ į çħ§ ĊĠĠĠ ĠLog Util . i (" Capture But tom Ġstart ") ĊĠĠĠ Ġduration Ġ= Ġ 1 0 Ġ* Ġ 1 0 0 0 ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// é»ĺè®¤ æľĢ éķ¿ å½ķ åĪ¶ æĹ¶éĹ´ ä¸º 1 0 s ĊĠĠĠ ĠLog Util . i (" Capture But tom Ġend ") ĊĠĠĠ Ġmin _ duration Ġ= Ġ 1 3 0 0 ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// é»ĺè®¤ æľĢ çŁŃ å½ķ åĪ¶ æĹ¶éĹ´ ä¸º 1 . 5 s ĊĊĠĠĠ Ġcenter _ X Ġ= Ġ(( button _ size Ġ+ Ġoutside _ add _ size Ġ* Ġ 2 ) Ġ/ Ġ 2 ). toFloat () ĊĠĠĠ Ġcenter _ Y Ġ= Ġ(( button _ size Ġ+ Ġoutside _ add _ size Ġ* Ġ 2 ) Ġ/ Ġ 2 ). toFloat () ĊĊĠĠĠ Ġrect F Ġ= ĠRect F ( ĊĠĠĠĠĠ Ġcenter _ X Ġ- Ġ( button _ radius Ġ+ Ġoutside _ add _ size Ġ- ĠstrokeWidth Ġ/ Ġ 2 ), ĊĠĠĠĠĠ Ġcenter _ Y Ġ- Ġ( button _ radius Ġ+ Ġoutside _ add _ size Ġ- ĠstrokeWidth Ġ/ Ġ 2 ), ĊĠĠĠĠĠ Ġcenter _ X Ġ+ Ġ( button _ radius Ġ+ Ġoutside _ add _ size Ġ- ĠstrokeWidth Ġ/ Ġ 2 ), ĊĠĠĠĠĠ Ġcenter _ Y Ġ+ Ġ( button _ radius Ġ+ Ġoutside _ add _ size Ġ- ĠstrokeWidth Ġ/ Ġ 2 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtimer Ġ= ĠRecord Count Down Timer ( duration . to Long (), Ġ( duration Ġ/ Ġ 3 6 0 ). to Long ()) ĠĠĠ Ġ// å½ķ åĪ¶ å®ļæĹ¶ åĻ¨ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠ Ġset Measured Dimension ( button _ size Ġ+ Ġoutside _ add _ size Ġ* Ġ 2 , Ġbutton _ size Ġ+ Ġoutside _ add _ size Ġ* Ġ 2 ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠ Ġm Paint . style Ġ= ĠPaint . Style . FILL ĊĊĠĠĠ Ġm Paint . color Ġ= Ġresources . getColor ( outside _ color ) Ġ// å¤ĸ åľĨ ï¼Ī åįĬ éĢı æĺİ çģ ° èī² ï¼ī ĊĠĠĠ Ġcanvas . draw Circle ( center _ X , Ġcenter _ Y , Ġbutton _ outside _ radius , Ġm Paint ) ĊĊĠĠĠ Ġm Paint . color Ġ= Ġresources . getColor ( inside _ color ) Ġ Ġ// åĨħ åľĨ ï¼Ī çĻ½ èī² ï¼ī ĊĠĠĠ Ġcanvas . draw Circle ( center _ X , Ġcenter _ Y , Ġbutton _ inside _ radius , Ġm Paint ) ĊĊĠĠĠ Ġ// å¦Ĥæŀľ çĬ¶æĢģ ä¸º å½ķ åĪ¶ çĬ¶æĢģ ï¼Į åĪĻ ç»ĺ åĪ¶ å½ķ åĪ¶ è¿Ľ åº¦ æĿ¡ ĊĠĠĠ Ġif Ġ( state Ġ== ĠSTATE _ REC ORDER ING ) Ġ{ ĊĠĠĠĠĠ Ġm Paint . color Ġ= Ġresources . getColor ( progress _ color ) ĊĠĠĠĠĠ Ġm Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠ Ġm Paint . stroke Width Ġ= ĠstrokeWidth ĊĠĠĠĠĠ Ġcanvas . draw Arc ( rect F , Ġ- 9 0 f , Ġprogress , Ġfalse , Ġm Paint ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util . i (" state Ġ= Ġ$ state ") ĊĠĠĠĠĠĠĠ Ġif Ġ( event . pointer Count Ġ<= Ġ 1 Ġ&& Ġstate Ġ== ĠSTATE _ IDLE ){ ĊĠĠĠĠĠĠĠĠĠ Ġevent _ Y Ġ= Ġevent . y ĠĠĠĠ Ġ// è®°å½ķ Y åĢ¼ ĊĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ PRESS ĠĠĠĠĠĠĠ Ġ// ä¿®æĶ¹ å½ĵåīį çĬ¶æĢģ ä¸º çĤ¹åĩ» æĮī ä¸ĭ ĊĊĠĠĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ æĮīéĴ® çĬ¶æĢģ æĺ¯åĲ¦ ä¸º åı¯ å½ķ åĪ¶ çĬ¶æĢģ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( button _ state Ġ== ĠBUTTON _ STATE _ ONLY _ REC ORDER Ġ|| Ġbutton _ state Ġ== ĠBUTTON _ STATE _ BOTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ( long Press Runnable , Ġ 3 0 0 ) ĠĠĠ Ġ// åĲĮæĹ¶ å»¶ éķ¿ 5 0 0 åĲ¯åĬ¨ éķ¿ æĮī åĲİ å¤ĦçĲĨ çļĦ éĢ»è¾ĳ Runnable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġif Ġ( capture L is enter Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ&& Ġstate Ġ== ĠSTATE _ REC ORDER ING ĊĠĠĠĠĠĠĠ Ġ&& Ġ( button _ state Ġ== ĠBUTTON _ STATE _ ONLY _ REC ORDER Ġ|| Ġbutton _ state Ġ== ĠBUTTON _ STATE _ BOTH ) ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// è®°å½ķ å½ĵåīį Y åĢ¼ ä¸İ æĮī ä¸ĭ æĹ¶åĢĻ Y åĢ¼çļĦ å·® åĢ¼ ï¼Į è°ĥçĶ¨ ç¼© æĶ¾ åĽŀè°ĥ æİ¥åı£ ĊĠĠĠĠĠĠĠ Ġcapture L is enter !!. record Zoom ( event _ Y Ġ- Ġevent . y ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> ĊĠĠĠĠĠĠĠ Ġ// æł¹æį® å½ĵåīį æĮīéĴ® çļĦ çĬ¶æĢģ è¿Ľè¡Į çĽ¸åºĶ çļĦ å¤ĦçĲĨ ĊĠĠĠĠĠĠĠ Ġhandler Un press By State () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġ// å½ĵ æīĭ æĮĩ æĿ ¾ å¼Ģ æĮīéĴ® æĹ¶åĢĻ å¤ĦçĲĨ çļĦ éĢ»è¾ĳ ĊĠ Ġprivate Ġfun Ġhandler Un press By State () Ġ{ ĊĠĠĠ Ġremove Callbacks ( long Press Runnable ) Ġ// ç§»éĻ¤ éķ¿ æĮī éĢ»è¾ĳ çļĦ Runnable ĊĠĠĠ Ġ// æł¹æį® å½ĵåīį çĬ¶æĢģ å¤ĦçĲĨ ĊĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠ Ġ// å½ĵåīį æĺ¯ çĤ¹åĩ» æĮī ä¸ĭ ĊĠĠĠĠĠ ĠSTATE _ PRESS Ġ-> Ġif Ġ( capture L is enter Ġ!= Ġnull Ġ&& Ġ( button _ state Ġ== ĠBUTTON _ STATE _ ONLY _ CAPTURE Ġ|| Ġbutton _ state Ġ== ĠBUTTON _ STATE _ BOTH )) Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Capture Animation ( button _ inside _ radius ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ IDLE ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ// å½ĵåīį æĺ¯ éķ¿ æĮī çĬ¶æĢģ ĊĠĠĠĠĠ ĠSTATE _ REC ORDER ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer !!. cancel () Ġ// åģľæŃ¢ è®¡ æĹ¶ åĻ¨ ĊĠĠĠĠĠĠĠ Ġrecord End () ĠĠĠ Ġ// å½ķ åĪ¶ ç»ĵæĿŁ ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// å½ķ åĪ¶ ç»ĵæĿŁ ĊĠ Ġprivate Ġfun Ġrecord End () Ġ{ ĊĠĠĠ Ġif Ġ( capture L is enter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( re corded _ time Ġ< Ġmin _ duration ) ĊĠĠĠĠĠĠĠ Ġcapture L is enter !!. record Short ( re corded _ time . to Long ()) // åĽŀè°ĥ å½ķ åĪ¶ æĹ¶éĹ´ è¿ĩ çŁŃ ĊĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġcapture L is enter !!. record End ( re corded _ time . to Long ()) Ġ Ġ// åĽŀè°ĥ å½ķ åĪ¶ ç»ĵæĿŁ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreset Record Anim () Ġ Ġ// éĩį åĪ¶ æĮīéĴ® çĬ¶æĢģ ĊĠ Ġ} ĊĊĠ Ġ// éĩį åĪ¶ çĬ¶æĢģ ĊĠ Ġprivate Ġfun Ġreset Record Anim () Ġ{ ĊĠĠĠ Ġstate Ġ= ĠSTATE _ BAN ĊĠĠĠ Ġprogress Ġ= Ġ 0 f ĠĠĠĠĠĠ Ġ// éĩį åĪ¶ è¿Ľ åº¦ ĊĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ// è¿ĺ åİŁ æĮīéĴ® åĪĿå§ĭ çĬ¶æĢģ åĬ¨çĶ» ĊĠĠĠ Ġstart Record Animation ( ĊĠĠĠĠĠ Ġbutton _ outside _ radius , ĊĠĠĠĠĠ Ġbutton _ radius , ĊĠĠĠĠĠ Ġbutton _ inside _ radius , ĊĠĠĠĠĠ Ġbutton _ radius Ġ* Ġ 0 . 7 5 f ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ// åĨħ åľĨ åĬ¨çĶ» ĊĠ Ġprivate Ġfun Ġstart Capture Animation ( inside _ start : ĠFloat ) Ġ{ ĊĠĠĠ Ġval Ġinside _ anim Ġ= ĠValue Animator . of Float ( inside _ start , Ġinside _ start Ġ* Ġ 0 . 7 5 f , Ġinside _ start ) ĊĠĠĠ Ġinside _ anim . add Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠ Ġbutton _ inside _ radius Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĠĠĠ Ġinside _ anim . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠ Ġ// åĽŀè°ĥ æĭ į çħ§ æİ¥åı£ ĊĠĠĠĠĠĠĠ Ġcapture L is enter !!. take P ictures () ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ BAN ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġinside _ anim . duration Ġ= Ġ 1 0 0 ĊĠĠĠ Ġinside _ anim . start () ĊĠ Ġ} ĊĊĠ Ġ// åĨħ å¤ĸ åľĨ åĬ¨çĶ» ĊĠ Ġprivate Ġfun Ġstart Record Animation ( ĊĠĠĠ Ġoutside _ start : ĠFloat , ĊĠĠĠ Ġoutside _ end : ĠFloat , ĊĠĠĠ Ġinside _ start : ĠFloat , ĊĠĠĠ Ġinside _ end : ĠFloat ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġoutside _ anim Ġ= ĠValue Animator . of Float ( outside _ start , Ġoutside _ end ) ĊĠĠĠ Ġval Ġinside _ anim Ġ= ĠValue Animator . of Float ( inside _ start , Ġinside _ end ) ĊĠĠĠ Ġ// å¤ĸ åľĨ åĬ¨çĶ» çĽĳåĲ¬ ĊĠĠĠ Ġoutside _ anim . add Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠ Ġbutton _ outside _ radius Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// åĨħ åľĨ åĬ¨çĶ» çĽĳåĲ¬ ĊĠĠĠ Ġinside _ anim . add Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠ Ġbutton _ inside _ radius Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġset Ġ= ĠAn imator Set () ĊĠĠĠ Ġ// å½ĵ åĬ¨çĶ» ç»ĵæĿŁ åĲİ åĲ¯åĬ¨ å½ķ åĥı Runnable å¹¶ä¸Ķ åĽŀè°ĥ å½ķ åĥı å¼Ģå§ĭ æİ¥åı£ ĊĠĠĠ Ġset . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½®ä¸º å½ķ åĪ¶ çĬ¶æĢģ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠSTATE _ LONG _ PRESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( capture L is enter Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapture L is enter !!. record Start () ĊĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ REC ORDER ING ĊĠĠĠĠĠĠĠĠĠ Ġtimer !!. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġset . play To gether ( outside _ anim , Ġinside _ anim ) ĊĠĠĠ Ġset . duration Ġ= Ġ 1 0 0 ĊĠĠĠ Ġset . start () ĊĠ Ġ} ĊĊĠ Ġ// æĽ´æĸ° è¿Ľ åº¦ æĿ¡ ĊĠ Ġprivate Ġfun Ġupdate Progress ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠ Ġrecorded _ time Ġ= Ġ( duration Ġ- Ġmillis Until Finished ). toInt () ĊĠĠĠ Ġprogress Ġ= Ġ 3 6 0 f Ġ- Ġmillis Until Finished Ġ/ Ġduration . toFloat () Ġ* Ġ 3 6 0 f ĊĠĠĠ Ġinvalidate () ĊĠ Ġ} ĊĊĠ Ġ// å½ķ åĪ¶ è§Ĩé¢ĳ è®¡ æĹ¶ åĻ¨ ĊĠ Ġprivate Ġinner Ġclass ĠRecord Count Down Timer Ġinternal Ġconstructor ( ĊĠĠĠ Ġmillis In Future : ĠLong , ĊĠĠĠ Ġcount Down Interval : ĠLong ĊĠ Ġ) Ġ: ĠCount Down Timer ( millis In Future , Ġcount Down Interval ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠ Ġupdate Progress ( millis Until Finished ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠ Ġupdate Progress ( 0 ) ĊĠĠĠĠĠ Ġrecord End () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// éķ¿ æĮī çº¿ç¨ĭ ĊĠ Ġprivate Ġinner Ġclass ĠLong Press Runnable Ġ: ĠRunnable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ LONG _ PRESS ĠĠ Ġ// å¦Ĥæŀľ æĮī ä¸ĭ åĲİ ç»ı è¿ĩ 5 0 0 æ¯ « ç§Ĵ åĪĻ ä¼ļ ä¿®æĶ¹ å½ĵåīį çĬ¶æĢģ ä¸º éķ¿ æĮī çĬ¶æĢģ ĊĠĠĠĠĠ Ġ// æ²¡æľī å½ķ åĪ¶ æĿĥéĻĲ ĊĠĠĠĠĠ Ġif Ġ( Check Permission . record State Ġ!= ĠCheck Permission . STATE _ SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠSTATE _ IDLE ĊĠĠĠĠĠĠĠ Ġif Ġ( capture L is enter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcapture L is enter !!. record Error () ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ// åĲ¯åĬ¨ æĮīéĴ® åĬ¨çĶ» ï¼Į å¤ĸ åľĨ åıĺ å¤§ ï¼Į åĨħ åľĨ ç¼© å°ı ĊĠĠĠĠĠ Ġstart Record Animation ( ĊĠĠĠĠĠĠĠ Ġbutton _ outside _ radius , ĊĠĠĠĠĠĠĠ Ġbutton _ outside _ radius Ġ+ Ġoutside _ add _ size , ĊĠĠĠĠĠĠĠ Ġbutton _ inside _ radius , ĊĠĠĠĠĠĠĠ Ġbutton _ inside _ radius Ġ- Ġinside _ reduce _ size ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/ ************************************************ ** ĊĠĠ Ġ* Ġå¯¹ å¤ĸ æıĲä¾Ľ çļĦ API ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠ Ġ*/ ĊĊĠ Ġ// è®¾ç½® æľĢ éķ¿ å½ķ åĪ¶ æĹ¶éĹ´ ĊĠ Ġfun Ġset Duration ( duration : ĠInt ) Ġ{ ĊĠĠĠ Ġthis . duration Ġ= Ġduration ĊĠĠĠ Ġtimer Ġ= ĠRecord Count Down Timer ( duration . to Long (), Ġ( duration Ġ/ Ġ 3 6 0 ). to Long ()) ĠĠĠ Ġ// å½ķ åĪ¶ å®ļæĹ¶ åĻ¨ ĊĠ Ġ} ĊĊĠ Ġ// è®¾ç½® æľĢ çŁŃ å½ķ åĪ¶ æĹ¶éĹ´ ĊĠ Ġfun Ġset Min Duration ( duration : ĠInt ) Ġ{ ĊĠĠĠ Ġthis . min _ duration Ġ= Ġduration ĊĠ Ġ} ĊĊĠ Ġ// è®¾ç½® åĽŀè°ĥ æİ¥åı£ ĊĠ Ġfun Ġset Capture L is enter ( capture L is enter : ĠCapture Listener ) Ġ{ ĊĠĠĠ Ġthis . capture L is enter Ġ= Ġcapture L is enter ĊĠ Ġ} ĊĊĠ Ġ// è®¾ç½® æĮīéĴ® åĬŁèĥ½ ï¼Ī æĭ į çħ§ åĴĮ å½ķ åĥı ï¼ī ĊĠ Ġfun Ġset Button Features ( state : ĠInt ) Ġ{ ĊĠĠĠ Ġthis . button _ state Ġ= Ġstate ĊĠ Ġ} ĊĊĠ Ġ// è®¾ç½® çĬ¶æĢģ ĊĠ Ġfun Ġreset State () Ġ{ ĊĠĠĠ Ġstate Ġ= ĠSTATE _ IDLE ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġval ĠSTATE _ IDLE Ġ= Ġ 0 x 0 0 1 ĠĠĠĠĠĠĠ Ġ// ç©º éĹ ² çĬ¶æĢģ ĊĠĠĠ Ġval ĠSTATE _ PRESS Ġ= Ġ 0 x 0 0 2 ĠĠĠĠĠĠ Ġ// æĮī ä¸ĭ çĬ¶æĢģ ĊĠĠĠ Ġval ĠSTATE _ LONG _ PRESS Ġ= Ġ 0 x 0 0 3 Ġ Ġ// éķ¿ æĮī çĬ¶æĢģ ĊĠĠĠ Ġval ĠSTATE _ REC ORDER ING Ġ= Ġ 0 x 0 0 4 Ġ// å½ķ åĪ¶ çĬ¶æĢģ ĊĠĠĠ Ġval ĠSTATE _ BAN Ġ= Ġ 0 x 0 0 5 ĠĠĠĠĠĠĠĠ Ġ// ç¦ģ æŃ¢ çĬ¶æĢģ ĊĠ Ġ} Ċ } Ċ