package Ġcom . ang cy o . u iv iew . rs en Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġcom . ang cy o . u iv iew . kotlin . density Ċ import Ġcom . ang cy o . u iv iew . resources . R Anim Listener Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġang cy o Ġon Ġ 2 0 1 7 - 0 7 - 2 3 . Ċ Ġ*/ Ċ class ĠBase Point Refresh View ( context : ĠContext ) Ġ: ĠView ( context ), ĊĠĠĠĠĠĠĠ ĠRefresh Layout . On Top View Move Listener , ĠRefresh Layout . On Bottom View Move Listener Ġ{ ĊĊĠĠĠ Ġvar Ġwidth Size : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġheight Size : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** çĤ¹ çļĦ æķ°éĩı */ ĊĠĠĠ Ġvar Ġpoint Count Ġ= Ġ 3 ĊĠĠĠ Ġ/** çĤ¹ çļĦ å¤§å°ı */ ĊĠĠĠ Ġvar Ġpoint Size Ġ= Ġ 0 ĊĠĠĠ Ġ/** çĤ¹ ä¹ĭéĹ´ éĹ´ éļ Ļ çļĦ å¤§å°ı */ ĊĠĠĠ Ġvar Ġpoint Space Size Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġpaint : ĠPaint ĊĊĠĠĠ Ġ/** é«ĺ äº ® çļĦ çĤ¹ */ ĊĠĠĠ Ġprivate Ġvar Ġcurrent Point Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġvalue Anim : ĠValue Animator Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĠValue Animator . of Int ( 1 , Ġpoint Count Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġanim . duration Ġ= Ġ 6 0 0 ĊĠĠĠĠĠĠĠ Ġanim . add Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point Ġ= Ġit . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L . e (" call : Ġstart Animation Ġ-> Ġ$ current Point ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate On Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġanim . addListener ( object Ġ: ĠR Anim Listener () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Finish ( animation : ĠAn imator ?, Ġcancel : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation Finish ( animation , Ġcancel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cancel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate On Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġanim . repeat Count Ġ= ĠAnimation . INF IN ITE ĊĠĠĠĠĠĠĠ Ġanim . repeat Mode Ġ= ĠAnimation . RE START ĊĠĠĠĠĠĠĠ Ġanim . interpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġanim ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Will Not Draw ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġdp Ġ= Ġdensity ĊĠĠĠĠĠĠĠ Ġpoint Size Ġ= Ġ( dp Ġ* Ġ 8 ). toInt () ĊĠĠĠĠĠĠĠ Ġpoint Space Size Ġ= Ġ( dp Ġ* Ġ 6 ). toInt () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( point Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Size Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Size Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Size Ġ= Ġpoint Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Size Ġ= Ġ( dp Ġ* Ġ 6 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Size Ġ= Ġpoint Size Ġ* Ġpoint Count Ġ+ Ġ( point Count Ġ- Ġ 1 ) Ġ* Ġpoint Space Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Size Ġ= Ġ( dp Ġ* Ġ 6 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width Size , Ġheight Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. point Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcx : ĠFloat Ġ= Ġpoint Size Ġ/ Ġ 2 f Ġ+ Ġ( i Ġ- Ġ 1 ) Ġ* Ġ( point Space Size Ġ+ Ġpoint Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġcurrent Point ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠColor . parse Color ("# 8 0 8 0 8 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠColor . parse Color ("# C 0 C 0 C 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( cx , Ġ( meas ured Height Ġ/ Ġ 2 ). toFloat (), Ġ( point Size Ġ/ Ġ 2 ). toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Top MoveTo ( view : ĠView ?, Ġtop : ĠInt , ĠmaxHeight : ĠInt , Ġstate : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Move ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bottom MoveTo ( view : ĠView ?, Ġbottom : ĠInt , ĠmaxHeight : ĠInt , Ġstate : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Move ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Move ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠRefresh Layout . TOP Ġ|| Ġstate Ġ== ĠRefresh Layout . BOTTOM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! value Anim . is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Anim . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Anim . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġstop Animation () ĊĠĠĠ Ġ} Ċ } Ċ