package Ġcom . shar max z . battle _ dual . registration . anim Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġcom . shar max z . battle _ dual . R Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . supervisor Scope Ċ Ċ /** Ċ Ġ* Ġ ĠRegistration ĠArrow ĠAnimation Ċ Ġ* Ċ Ġ* Ġ ĠThis Ġcode Ġhave Ġresponsibility Ġto Ġdo Ġthe Ġanimation Ġof Ġthe ĠRegistration ĠScreen . Ċ Ġ* Ġ ĠHere Ġis Ġpossible Ġto Ġchange Ġthe Ġvelocity Ġthat Ġarrow Ġfall Ġand Ġother Ġpreferences Ċ Ġ* Ġ Ġas Ġchange Ġthe Ġrange Ġof Ġthe Ġkick Ġanimation . Ċ Ġ* Ċ Ġ* Ġ ĠJ UST ĠUSE ĠTHIS ĠCODE ĠWITH ĠTHE ĠRegistration Activity ! Ċ Ġ* Ċ Ġ* Ġ ĠYou Ġneed Ġto Ġget Ġthe Ġview Ġand Ġmetrics Ġof Ġthe Ġscreen . Ċ Ġ* Ċ Ġ* Ġ ĠUsage : Ċ Ġ* Ċ Ġ* ĠĠ Ġval Ġview Ġ= ĠfindViewById < Constraint Layout >( R . id . layout ) Ċ Ġ* ĠĠ Ġval Ġdown _ threshold Ġ= Ġmetrics ?. height Pixels ?. times ( 9 5 )?. div ( 1 0 0 ) !!. toFloat () Ċ Ġ* ĠĠ Ġval Ġup _ threshold Ġ= Ġmetrics ?. height Pixels ?. times ( 4 0 )?. div ( 1 0 0 ) !!. toFloat () Ċ Ġ* ĠĠ Ġval Ġregistration _ up _ threshold Ġ= Ġresources . get Dimension Pixel Size ( resources . getIdentifier (" status _ bar _ height ", Ġ" dim en ", Ġ" android ")) Ċ Ġ* Ċ Ġ* ĠĠ ĠArrow ( this , Ġview , Ġarrow , Ġup _ threshold , Ġdown _ threshold , Ġregistration _ up _ threshold ) Ċ Ġ* Ċ Ġ**/ Ċ Ċ class ĠArrow ( private Ġval Ġcontext Ġ: ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġview Ġ: ĠConstraint Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġarrow Ġ: ĠImageView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġrectangle Ġ: ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontent Ġ: ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġup _ threshold Ġ: ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdown _ threshold Ġ: ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġregistration _ up _ threshold Ġ: ĠInt ) Ġ{ ĊĊĠĠĠ Ġ// Preferences ĊĠĠĠ Ġ// Ġregion ĠGr avity ĠForce ĊĠĠĠ Ġprivate Ġval Ġgravity _ force Ġ: ĠFloat Ġ= Ġ 1 0 f ĊĠĠĠ Ġprivate Ġval Ġlimit Ġ: ĠFloat Ġ= Ġ 1 . 6 f ĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġprivate Ġvar Ġhold Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġgravity Ġ= Ġtrue ĊĠĠĠ Ġvar Ġlogin Ġ= Ġfalse ĊĠĠĠ Ġvar Ġregistration Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġy Ġ: ĠFloat ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġy Up Ġ: ĠFloat ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġy Down Ġ: ĠFloat ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġregion ĠRectangle ĊĠĠĠ Ġprivate Ġval Ġrectangle Anim Ġ= ĠRectangle ( context , Ġrectangle , Ġcontent , Ġdown _ threshold ) ĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġprivate Ġval Ġsh ake Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . arrow _ shake ) ĊĠĠĠ Ġprivate Ġval Ġblink Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . arrow _ blink ) ĊĠĠĠ Ġprivate Ġval Ġblink 1 Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . arrow _ blink 1 ) ĊĠĠĠ Ġprivate Ġval Ġblink 2 Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . arrow _ blink 2 ) ĊĠĠĠ Ġprivate Ġval Ġgravity _ soft Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . arrow _ gravity _ soft ) ĊĠĠĠ Ġprivate Ġval Ġgravity _ normal Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . arrow _ gravity _ normal ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener () ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Ġ() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif ( registration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslide Up ( 1 f ) ĊĠĠĠĠĠĠĠ Ġelse Ġif ( login Ġ&& Ġ! registration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslide Down ( limit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif (! login ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslide Up ( limit ) ĊĊĠĠĠĠĠĠĠ Ġif (! hold Ġ&& Ġgravity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity () ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 ) ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġprivate Ġfun Ġlistener () Ġ{ ĊĠĠĠĠĠĠĠ Ġview . setOn Touch Listener Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow . start Animation ( shake ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Down Ġ= Ġevent . y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( login Ġ&& Ġ! registration Ġ&& Ġy Down !! Ġ< Ġrectangle . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhold Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Up Ġ= Ġevent . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Down Ġ Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhold Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġevent . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Down Ġ!= Ġnull Ġ&& Ġhold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe () ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove ( move Ġ: ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġpercentage ( up _ threshold ) ĊĠĠĠĠĠĠĠ Ġarrow . alpha Ġ= Ġpercentage ĊĠĠĠĠĠĠĠ Ġarrow . y Ġ= Ġmove ĊĠĠĠĠĠĠĠ Ġrectangle Anim . alpha Content ( 1 Ġ- Ġpercentage Ġ) ĊĠĠĠĠĠĠĠ Ġrectangle Anim . follow ( move ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswipe ( direction Ġ: ĠString Ġ= Ġ" UP ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Y Ġ= Ġy Down !!. minus ( y !! ) ĊĠĠĠĠĠĠĠ Ġvar Ġmove Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġwhen ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" UP " Ġ-> Ġ Ġmove Ġ= Ġdown _ threshold . minus ( diff Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" DOWN " Ġ-> Ġmove Ġ Ġ= Ġup _ threshold . minus ( diff Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( move Ġ< Ġup _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Ġ= Ġup _ threshold ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( hold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( move Ġ> Ġdown _ threshold ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Ġ= Ġdown _ threshold ĊĊĠĠĠĠĠĠĠ Ġmove ( move ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġslide ( limit Ġ: ĠFloat ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġarrow . y Ġ> Ġlimit Ġ&& Ġarrow . y Ġ< Ġdown _ threshold ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpercentage ( limit : ĠFloat ) Ġ: ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlimit . minus ( arrow . y ). div ( limit Ġ- Ġdown _ threshold ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġslide Up ( limit Ġ: ĠFloat Ġ= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( registration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slide ( registration _ up _ threshold Ġ- Ġrectangle . y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġpercentage ( registration _ up _ threshold . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( percentage Ġ< Ġlimit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġarrow . y Ġ- Ġgravity _ force ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rectangle . y Ġ> Ġregistration _ up _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( move Ġ<= Ġregistration _ up _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( registration _ up _ threshold . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! hold Ġ&& Ġ! login ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slide ( up _ threshold )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġ Ġpercentage ( up _ threshold ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( percentage Ġ< Ġlimit . minus ( 1 f )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġarrow . y Ġ- Ġgravity _ force ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move Ġ> Ġup _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( move Ġ<= Ġup _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( up _ threshold ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġslide Down ( limit Ġ: ĠFloat Ġ= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġ Ġpercentage ( up _ threshold ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( percentage Ġ< Ġlimit . minus ( 1 f )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġarrow . y Ġ+ Ġgravity _ force ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move Ġ< Ġup _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( move Ġ<= Ġup _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( up _ threshold ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgravity () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( arrow . y Ġ!= Ġ 0 f Ġ&& Ġarrow . y Ġ< Ġdown _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġarrow . y Ġ+ Ġgravity _ force ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move Ġ> Ġgravity _ force Ġ&& Ġmove Ġ< Ġdown _ threshold ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( down _ threshold ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Up Ġ!= Ġnull Ġ&& Ġarrow . y Ġ== Ġdown _ threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( down _ threshold . minus ( y Up !! )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 f .. 5 0 0 f Ġ-> Ġarrow . start Animation ( gravity _ soft ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġarrow . start Animation ( gravity _ normal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Up Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregistration () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregistration Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġback Pressed () Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( registration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregistration Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ