package Ġcom . example . splash view Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator . Animator Listener Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġandroid . view . animation . Over shoot Interpolator Ċ import Ġandroidx . core . animation . addListener Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠSpl ash View 3 : ĠView { ĊĊĠĠĠ Ġprivate Ġvar Ġm Paint : Paint ĊĠĠĠ Ġprivate Ġvar Ġm Hole Paint : Paint ĊĠĠĠ Ġprivate Ġval Ġm Circle Radius : Float Ġ= Ġ 1 8 f ĊĠĠĠ Ġprivate Ġval Ġm Big Radius : Float Ġ= Ġ 9 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Center X : ĠFloat Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Center Y : ĠFloat Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Color List : IntArray ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Value Animator : ĠValue Animator ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Angle : Float Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Default Duration : Long Ġ= Ġ 1 2 0 0 L ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Radius : Float Ġ= Ġm Big Radius ĊĠĠĠ Ġprivate Ġvar Ġm Distance : Float Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Hole Radius Ġ= Ġ 0 f ĊĊĠĠĠ Ġconstructor ( context : ĠContext ): super ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext , attribute Set : ĠAttributeSet ): super ( context , attribute Set ) ĊĠĠĠ Ġconstructor ( context : ĠContext , attribute Set : ĠAttributeSet , int : ĠInt ): super ( context , attribute Set , int ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġm Hole Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġm Hole Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġm Hole Paint . color Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġm Color List Ġ= Ġresources . getInt Array ( R . array . splash _ circle _ colors ) ĊĊĠĠĠĠĠĠĠ Ġm Value Animator Ġ= ĠValue Animator . of Float ( 0 f ,( Math . PI Ġ* Ġ 2 ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġm Value Animator . repeat Count Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġm Value Animator . duration Ġ= Ġm Default Duration ĊĠĠĠĠĠĠĠ Ġm Value Animator . interpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġm Value Animator . add Update Listener ( Value Animator . Animator Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Angle Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Value Animator . addListener ( object Ġ: ĠAn imator Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Mer ging Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Value Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġstart Draw ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠĠĠĠĠ Ġm Center X Ġ= Ġw Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġm Center Y Ġ= Ġh Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġm Distance Ġ= Ġ( Math . h ypot ( w . toDouble (), h . toDouble ()) Ġ/ Ġ 2 ). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Draw ( canvas : ĠCanvas ? ){ ĊĠĠĠĠĠĠĠ Ġif ( m Hole Radius Ġ> Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġm Distance Ġ/ Ġ 2 Ġ+ Ġm Hole Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Hole Paint . stroke Width Ġ= Ġm Distance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( m Center X , m Center Y , radius , m Hole Paint ) ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Color ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Circ les ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Circ les ( canvas : ĠCanvas ? ){ ĊĠĠĠĠĠĠĠ Ġvar Ġangle Ġ= ĠMath . PI Ġ* Ġ 2 Ġ/ Ġm Color List . size ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( index , it ) Ġin Ġm Color List . with Index ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcircle Angle Ġ= Ġangle Ġ* Ġindex Ġ+ ĠmCurrent Angle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( m Center X . plus ( m Current Radius Ġ* Ġ ĠMath . cos ( circle Angle ). toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ( m Center Y . plus ( m Current Radius Ġ* ĠMath . sin ( circle Angle ). toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( x , y , m Circle Radius , m Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Mer ging Animation (){ ĊĠĠĠĠĠĠĠ Ġm Value Animator Ġ= ĠValue Animator . of Float ( m Circle Radius , m Big Radius ) ĊĠĠĠĠĠĠĠ Ġm Value Animator . duration Ġ= Ġ 1 2 0 0 ĊĠĠĠĠĠĠĠ Ġm Value Animator . interpol ator Ġ= ĠOver shoot Interpolator ( 1 0 f ) ĊĠĠĠĠĠĠĠ Ġm Value Animator . add Update Listener ( Value Animator . Animator Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Radius Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Value Animator . addListener ( object Ġ: ĠAn imator . Animator Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Expand Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( p 0 : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Value Animator . reverse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Expand Animation (){ ĊĠĠĠĠĠĠĠ Ġm Value Animator Ġ= ĠValue Animator . of Float ( m Circle Radius , m Distance ) ĊĠĠĠĠĠĠĠ Ġm Value Animator . interpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġm Value Animator . duration Ġ= Ġm Default Duration ĊĠĠĠĠĠĠĠ Ġm Value Animator . add Update Listener ( Value Animator . Animator Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Hole Radius Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Value Animator . start () ĊĠĠĠ Ġ} Ċ } Ċ