package Ġcom . th om ask u enne th . android bu ch . multi window demo Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator . Animator Listener Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . TextView Ċ Ċ class ĠAnimated Number View ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠnumberOf Text Views Ġ= Ġ 2 0 ĊĠĠĠ Ġprivate Ġval Ġstart Size Ġ= Ġ 3 6 f ĊĠĠĠ Ġprivate Ġval Ġend Size Ġ= Ġ 1 2 8 f ĊĠĠĠ Ġprivate Ġval Ġduration Ġ= Ġ 3 0 0 0 ĊĊĠĠĠ Ġprivate Ġval Ġtext views Ġ= Ġmutable ListOf < TextView >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠnumberOf Text Views ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= ĠTextView ( context , Ġattrs ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ"$ i " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext views . add ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAnimation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĠValue Animator . of Float ( start Size , Ġend Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim . duration Ġ= Ġduration Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetRandom Duration () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim . setTarget ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim . repeat Mode Ġ= ĠValue Animator . RE START ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim . repeat Count Ġ= ĠValue Animator . INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim . addListener ( object Ġ: ĠAn imator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( anim ator : ĠAn imator ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( anim ator : ĠAn imator ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( anim ator : ĠAn imator ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( anim ator : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Random Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim . add Update Listener Ġ{ Ġanim ator : ĠValue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġanim ator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . tag Ġ= Ġanim ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġset Enabled ( isEnabled ) ĊĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġis Enabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( tv Ġin Ġtext views ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Random Location ( tv , Ġw , Ġh ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setEnabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( tv Ġin Ġtext views ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim Ġ= Ġtv . tag Ġas ĠAn imator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anim . is Paused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim . resume () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim . pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Random Location ( ĊĠĠĠĠĠĠĠ Ġtv : ĠTextView , ĊĠĠĠĠĠĠĠ Ġw : ĠInt , Ġh : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtv . x Ġ= Ġ( w . toDouble () Ġ* ĠMath . random ()). toFloat () ĊĠĠĠĠĠĠĠ Ġtv . y Ġ= Ġ( h . toDouble () Ġ* ĠMath . random ()). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetRandom Duration (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( duration . toDouble () Ġ* ĠMath . random ()). to Long () ĊĠĠĠ Ġ} Ċ }