package Ġcom . he w king . u ikit . loading čĊč Ċ import Ġandroid . animation . Animator Listener Adapter č Ċ import Ġandroid . animation . Value Animator č Ċ import Ġandroid . content . Context č Ċ import Ġandroid . graphics . Canvas č Ċ import Ġandroid . graphics . Paint č Ċ import Ġandroid . util . Attribute Set č Ċ import Ġandroid . view . View č Ċ import Ġandroid . view . animation . Bo unce Interpolator č Ċ import Ġcom . he w king . u ikit . R č Ċ import Ġcom . he w king . utils . dp 2 px č Ċ import Ġcom . he w king . utils . getColor čĊč Ċ /** čĊ Ġ* Ġ é¡¹çĽ® åĲįç§° ï¼ļ Flow Chat čĊ Ġ* Ġ ç±»çļĦ æııè¿° ï¼ļ æĬ ĸ éŁ³ åºķ éĥ¨ åĬłè½½ æĿ¡ čĊ Ġ* ĠåĪĽå»º äººåĳĺ ï¼ļ he w king čĊ Ġ* ĠåĪĽå»º æĹ¶éĹ´ ï¼ļ 2 0 1 8 / 1 2 / 2 7 Ġ 0 0 2 7 čĊ Ġ* Ġä¿®æĶ¹ äººåĳĺ ï¼ļ he w king čĊ Ġ* Ġä¿®æĶ¹ æĹ¶éĹ´ ï¼ļ 2 0 1 8 / 1 2 / 2 7 Ġ 0 0 2 7 čĊ Ġ* Ġä¿®æĶ¹ å¤ĩ æ³¨ ï¼ļ čĊ Ġ* ĠVersion : Ġ 1 . 0 . 0 čĊ Ġ*/ č Ċ class ĠD y Line Loading View ( ctx : ĠContext , Ġattr : ĠAttributeSet ) Ġ: ĠView ( ctx , Ġattr ) Ġ{ čĊčĊĠĠĠ Ġprivate Ġvar Ġanim Value Ġ= Ġ 0 f čĊčĊĠĠĠ Ġprivate Ġval Ġpaint Ġby Ġlazy Ġ{ čĊĠĠĠĠĠĠĠ ĠPaint (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġget Color ( R . color . pink _ fa 7 5 8 a ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġval Ġanim Ġ= ĠValue Animator . of Float ( 0 f , Ġ 1 f ). apply Ġ{ čĊĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠValue Animator . INF IN ITE čĊĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= ĠValue Animator . RE START čĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 1 0 0 0 čĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠBo unce Interpolator () čĊĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim Value Ġ= Ġit . animated Value Ġas ĠFloat čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate On Animation () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () čĊĠĠĠĠĠĠĠ Ġanim . start () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () čĊĠĠĠĠĠĠĠ Ġanim . cancel () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġw Mode Ġ= ĠMeasure Spec . get Mode ( width Measure Spec ) čĊĠĠĠĠĠĠĠ Ġvar Ġw Size Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) čĊĠĠĠĠĠĠĠ Ġval Ġh Mode Ġ= ĠMeasure Spec . get Mode ( height Measure Spec ) čĊĠĠĠĠĠĠĠ Ġvar Ġh Size Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( w Mode Ġ!= ĠMeasure Spec . EX ACT LY ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġw Size Ġ= Ġdp 2 px ( 3 0 0 f ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( h Mode Ġ!= ĠMeasure Spec . EX ACT LY ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġh Size Ġ= Ġdp 2 px ( 2 f ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( w Size , Ġh Size ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġcanvas Ġ?: Ġreturn čĊĠĠĠĠĠĠĠ Ġcanvas . save () čĊĠĠĠĠĠĠĠ Ġval Ġx Max Ġ= Ġwidth . div ( 2 f ) čĊĠĠĠĠĠĠĠ Ġval Ġy Max Ġ= Ġheight . div ( 2 f ) čĊĠĠĠĠĠĠĠ Ġcanvas . translate ( x Max , Ġy Max ) čĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect (- x Max . times ( anim Value ), Ġ- y Max . div ( 2 f ), Ġx Max . times ( anim Value ), Ġy Max . div ( 2 f ), Ġpaint ) čĊĠĠĠĠĠĠĠ Ġcanvas . restore () čĊĠĠĠ Ġ} čĊč Ċ }