package Ġcom . dd u . ui . fragment . study . ui Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . animation . Accel erate De cel erate Interpolator Ċ import Ġandroid . widget . Frame Layout Ċ import Ġcom . dd u . R Ċ import Ġcom . dd u . ic ore . bezier . Quadr atic PointF Type Evaluator Ċ import Ġcom . dd u . ic ore . ui . fragment . Default Fragment Ċ import Ġcom . dd u . ic ore . ui . widget . Move Button Ċ import Ġcom . i annotation . I Element Ċ import Ġkotlinx . android . synt hetic . main . study _ bezier .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġy zb zz Ġon Ġ 2 0 1 8 / 6 / 8 . Ċ Ġ*/ Ċ @ I Element (" customer ") Ċ class ĠBe zier View Fragment Ġ: ĠDefault Fragment () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . study _ bezier ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit View () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbtn _ shake . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Bezier () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Bezier () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġdisplay Metrics . width Pixels ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġdisplay Metrics . height Pixels ĊĊĠĠĠĠĠĠĠ Ġval Ġm Anim Coin Width Ġ= Ġbtn _ start . width ĊĠĠĠĠĠĠĠ Ġval Ġm Anim Coin Height Ġ= Ġbtn _ start . height ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠ Ġbtn _ start . getLocation In Window ( start ) ĊĠĠĠĠĠĠĠ Ġstart [ 0 ] Ġ= Ġbtn _ start . x . toInt () ĊĠĠĠĠĠĠĠ Ġstart [ 1 ] Ġ= Ġbtn _ start . y . toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġcontrol Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠ Ġbtn _ control . getLocation In Window ( control ) ĊĠĠĠĠĠĠĠ Ġcontrol [ 0 ] Ġ= Ġbtn _ control . x . toInt () Ġ+ Ġbtn _ control . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġcontrol [ 1 ] Ġ= Ġbtn _ control . y . toInt () Ġ+ Ġbtn _ control . height Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠ Ġbtn _ end . getLocation In Window ( end ) ĊĠĠĠĠĠĠĠ Ġend [ 0 ] Ġ= Ġbtn _ end . x . toInt () ĊĠĠĠĠĠĠĠ Ġend [ 1 ] Ġ= Ġbtn _ end . y . toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠMove Button ( mContext ) ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠFrame Layout . LayoutParams ( btn _ start . width , Ġbtn _ start . height ) ĊĠĠĠĠĠĠĠ Ġbutton . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġbutton . x Ġ= Ġstart [ 0 ]. toFloat () ĊĠĠĠĠĠĠĠ Ġbutton . y Ġ= Ġstart [ 1 ]. toFloat () Ċ // ĠĠĠĠĠĠĠ Ġbutton . x Ġ= Ġwidth Ġ/ Ġ 2 f Ġ- Ġm Anim Coin Width Ġ/ Ġ 2 f Ċ // ĠĠĠĠĠĠĠ Ġbutton . y Ġ= Ġheight Ġ/ Ġ 2 f Ġ- Ġm Anim Coin Height Ġ/ Ġ 2 f ĊĊĠĠĠĠĠĠĠ Ġrl _ root . addView ( button ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstart P Ġ= ĠPoint F () ĊĠĠĠĠĠĠĠ Ġval Ġend P Ġ= ĠPoint F () ĊĠĠĠĠĠĠĠ Ġval Ġcontrol P Ġ= ĠPoint F () ĊĊĠĠĠĠĠĠĠ Ġstart P . x Ġ= Ġstart [ 0 ]. toFloat () ĊĠĠĠĠĠĠĠ Ġstart P . y Ġ= Ġstart [ 1 ]. toFloat () ĊĊĠĠĠĠĠĠĠ Ġend P . x Ġ= Ġend [ 0 ]. toFloat () ĊĠĠĠĠĠĠĠ Ġend P . y Ġ= Ġend [ 1 ]. toFloat () ĊĊĠĠĠĠĠĠĠ Ġcontrol P . x Ġ= Ġcontrol [ 0 ]. toFloat () ĊĠĠĠĠĠĠĠ Ġcontrol P . y Ġ= Ġcontrol [ 1 ]. toFloat () Ċ Ċ // ĠĠĠĠĠĠĠ Ġstart P . x Ġ= Ġbtn _ start . x Ċ // ĠĠĠĠĠĠĠ Ġstart P . y Ġ= Ġbtn _ start . y Ċ // ĠĠĠĠĠĠĠ Ġstart P . x Ġ= Ġwidth Ġ/ Ġ 2 f Ġ- Ġm Anim Coin Width Ġ/ Ġ 2 f Ċ // ĠĠĠĠĠĠĠ Ġstart P . y Ġ= Ġheight Ġ/ Ġ 2 f Ġ- Ġm Anim Coin Height Ġ/ Ġ 2 f Ċ Ċ // ĠĠĠĠĠĠĠ Ġend P . x Ġ= Ġbtn _ end . x Ċ // ĠĠĠĠĠĠĠ Ġend P . y Ġ= Ġbtn _ end . y Ċ Ċ // ĠĠĠĠĠĠĠ Ġend P . x Ġ= Ġend [ 0 ] Ġ+ Ġwidth Ġ/ Ġ 2 f Ġ- Ġm Anim Coin Width Ġ/ Ġ 2 f Ċ // ĠĠĠĠĠĠĠ Ġend P . y Ġ= Ġend [ 1 ] Ġ+ Ġheight Ġ/ Ġ 2 f Ġ- Ġm Anim Coin Height Ġ/ Ġ 2 f Ċ // Ċ // ĠĠĠĠĠĠĠ Ġcontrol P . x Ġ= Ġ( end [ 0 ] Ġ- Ġm Anim Coin Width ). toFloat () Ċ // ĠĠĠĠĠĠĠ Ġcontrol P . y Ġ= Ġ( start P . y Ġ- Ġend P . y ) Ġ/ Ġ 2 ĊĊĊĠĠĠĠĠĠĠ ĠLog . v (" lh z ", Ġ" start P : Ġ$ start P ") ĊĠĠĠĠĠĠĠ ĠLog . v (" lh z ", Ġ" start P : Ġ$ control P ") ĊĠĠĠĠĠĠĠ ĠLog . v (" lh z ", Ġ" start P : Ġ$ end P ") ĊĊĠĠĠĠĠĠĠ Ġval Ġobject Animator Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Object ( button , Ġ" m PointF ", ĠQu adr atic PointF Type Evaluator ( control P ), Ġstart P , Ġend P ) Ċ // ĠĠĠĠĠĠĠ Ġobject Animator . addListener ( object Ġ: ĠAn imator . Animator Listener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAn imator ?) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrl _ root . remove View ( button ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ?) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠ Ġobject Animator . start () Ċ // ĠĠĠĠĠĠĠ Ġval Ġvalue Animator Ġ= ĠValue Animator . of Object ( PointF Type Evaluator ( control P ), Ġstart P , Ġend P ) Ċ // ĠĠĠĠĠĠĠ Ġvalue Animator . add Update Listener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġit . animated Value Ġas ĠPoint F Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . x Ġ= Ġpoint . x Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . y Ġ= Ġpoint . y Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġobject Animator 2 Ġ= ĠObject Animator . of Float ( button , Ġ" scale X ", Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġobject Animator 3 Ġ= ĠObject Animator . of Float ( button , Ġ" scale Y ", Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġanim ator Set Ġ= ĠAn imator Set () ĊĠĠĠĠĠĠĠ Ġanim ator Set . play To gether ( object Animator , Ġobject Animator 2 , Ġobject Animator 3 ) ĊĠĠĠĠĠĠĠ Ġanim ator Set . interpol ator Ġ= ĠAccel erate De cel erate Interpolator () ĊĠĠĠĠĠĠĠ Ġanim ator Set . duration Ġ= Ġ 7 0 0 ĊĠĠĠĠĠĠĠ Ġanim ator Set . start Delay Ġ= Ġ( 1 0 0 Ġ* Ġ 1 ). to Long () ĊĠĠĠĠĠĠĠ Ġanim ator Set . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrl _ root . remove View ( button ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġanim ator Set . start () ĊĠĠĠ Ġ} Ċ } Ċ