package Ġcom . jc . c andy catch . advanced Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Accel erate Interpolator Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . jc . c andy catch . Base Activity Ċ import Ġcom . jc . c andy catch . R Ċ import Ġcom . jc . c andy catch . databinding . Activity Advanced Binding Ċ import Ġcom . jc . c andy catch . utils .* Ċ import Ġkotlin . math . absolute Value Ċ Ċ class ĠAdvanced Activity Ġ: ĠBase Activity < Activity Advanced Binding >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Count Down Dialog ( R . string . level _ advanced ) ĊĊĠĠĠĠĠĠĠ Ġstart Rotate Issue Tv () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Ob serve () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init Ob serve () ĊĊĠĠĠĠĠĠĠ ĠviewModel . point View Ld . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTextView ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( this @ Advanced Activity , Ġgenerate Random C andy ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . root . addView ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Map [ id ] Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Moving ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Touch Listener ( object Ġ: ĠView . On Touch Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch ( view : ĠView ?, Ġmotion Event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( motion Event ?. action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo V ibr ator Effect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Number ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . catch Number Tv . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . catch _ number , Ġcatch Number ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. id ?. let Ġ{ Ġid Key Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Map . remove ( id Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġplay Again () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . play Again () ĊĠĠĠĠĠĠĠ Ġview Binding . catch Number Tv . text Ġ= ĠgetString ( R . string . catch _ number , Ġcatch Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Rotate Issue Tv () Ġ{ ĊĠĠĠĠĠĠĠ ĠObject Animator . of Float ( view Binding . issue Iv , Ġ" rotation ", Ġ 0 f , Ġ 3 6 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 2 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= ĠObject Animator . RE START ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠObject Animator . INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Moving ( tv : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransition Pair Ġ= Ġcalculate Position ( generate Random X (), Ġgenerate Random Y ()) ĊĠĠĠĠĠĠĠ Ġtv . layout Params Ġ= ĠConstraint Layout . LayoutParams ( tv Width , Ġtv Height ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom To Bottom Ġ= ĠConstraint Set . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop To Top Ġ= ĠConstraint Set . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart To Start Ġ= ĠConstraint Set . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend ToEnd Ġ= ĠConstraint Set . PARENT _ ID ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġanim X Ġ= ĠObject Animator . of Float ( tv , Ġ" translation X ", Ġtransition Pair . first . toFloat ()) ĊĠĠĠĠĠĠĠ Ġval Ġanim Y Ġ= ĠObject Animator . of Float ( tv , Ġ" translation Y ", Ġtransition Pair . second . toFloat ()) ĊĠĠĠĠĠĠĠ ĠAn imator Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay To gether ( anim X , Ġanim Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 3 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠAccel erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( p 0 : ĠAn imator ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Map . remove ( tv . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Result Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( p 0 : ĠAn imator ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( p 0 : ĠAn imator ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Position ( x : ĠInt , Ġy : ĠInt ): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcheck Transition Xy ( Pair ( x Ġ- Ġhalf Screen Width , Ġy Ġ- Ġhalf Screen Height )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĸ ä¸Ģä¸ª çĽ¸åĲĮ å¤§å°ı çļĦ ä¸ī è§Ĵ å½¢ çļĦè¯Ŀ ï¼Į è¿ĺæĺ¯ æľī åı¯èĥ½ å¹³ ç§» ä¸į åĩº å±ı å¹ķ ï¼Į åºĶè¯¥ éģ¿åħį è¿Ļä¸ª æĥħåĨµ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Transition Xy ( transition Xy Pair : ĠPair < Int , ĠInt >): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// éĢĴ å½Ĵ çļĦ ç»Ī æŃ¢ æĿ¡ä»¶ ĊĠĠĠĠĠĠĠ Ġif Ġ( transition Xy Pair . first . absolute Value Ġ> Ġ( half Screen Width Ġ+ Ġtv Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġtransition Xy Pair . second . absolute Value Ġ> Ġ( half Screen Height Ġ+ Ġtv Height ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtransition Xy Pair ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcheck Transition Xy ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( transition Xy Pair . first Ġ* Ġ 1 . 1 ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( transition Xy Pair . second Ġ* Ġ 1 . 1 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ }