package Ġcl water . bezier curve Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Linear Interpolator Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġg eng zhi bo Ġon Ġ 2 0 1 8 / 1 / 1 7 . Ċ Ġ*/ Ċ class ĠBe zier Curve View Ġ: ĠView Ġ{ ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĊĠĠĠ Ġdata Ġclass ĠPoint ( var Ġx : ĠFloat , Ġvar Ġy : Float ) ĠĠ Ġ// åĿĲæłĩ çĤ¹ çļĦæķ°æį® ç±» ĊĊĠĠĠ Ġvar Ġper Ġ= Ġ 0 F ĊĠĠĠ Ġvar Ġpoints Ġ: ĠMutable List < Point > Ġ= ĠArrayList () ĊĠĠĠ Ġval Ġbe zier Points Ġ: ĠMutable List < Point > Ġ= ĠArrayList () ĊĠĠĠ Ġvar Ġview Time Ġ= Ġ 1 0 0 0 F ĠĠĠ Ġ// åĬ¨çĶ» æĹ¶éĹ´ ĊĊĠĠĠ Ġval Ġline Paint Ġ= ĠPaint () ĊĠĠĠ Ġval Ġtext Paint Ġ= ĠPaint () ĊĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĊĠĠĠ Ġvar Ġin Running Ġ= Ġtrue ĠĠĠ Ġ// æĺ¯åĲ¦ åľ¨ ç»ĺ åĪ¶ åĽ¾åĥı ĊĠĠĠ Ġvar Ġis More Ġ= Ġfalse ĠĠĠĠĠ Ġ// æĺ¯åĲ¦ æĺ¯ æĹł éĻĲåĪ¶ æİ§åĪ¶ çĤ¹ æ¨¡å¼ı ĊĠĠĠ Ġvar Ġdraw Control Ġ= Ġtrue Ġ Ġ// æĺ¯åĲ¦ ç»ĺ åĪ¶ è¾ ħ åĬ© çº¿ ĊĊĊĊĠĠĠ Ġvar Ġlevel Ġ= Ġ 0 ĊĠĠĠ Ġ// çĤ¹ å±Ĥ çº§ åŃĹç¬¦ éĽĨ ĊĠĠĠ Ġval Ġchar Sequence Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" P ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" A " Ġ," B " Ġ," C " Ġ," D " Ġ," E " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ," F " Ġ," G " Ġ," H " Ġ," I " Ġ," J " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ," K " Ġ," L " Ġ," M " Ġ," N " ĊĠĠĠ Ġ) ĊĠĠĠ Ġ// è¾ ħ åĬ© çº¿ é¢ľèī² éĽĨ ĊĠĠĠ Ġval Ġcolor Sequence Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 F 0 0 0 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff 1 B FFF 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff 1 7 FF 8 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff 2 5 FF 2 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff A 7 FF 0 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff FFE 6 1 E , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff FF 9 B 0 C , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff FF 0 8 9 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff E 5 2 4 FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff 8 4 2 B FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff 0 9 0 B FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff 0 9 8 2 FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff F 8 A 1 FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff F 7 FF A 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff AA FF EC ĊĠĠĠ Ġ) ĊĊĊĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠView . Measure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġhe it ht Ġ= ĠView . Measure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġhe it ht ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ çĽ¸åħ³ å·¥åħ· ç±» ĊĠĠĠĠĠĠĠ Ġinit Base Tools () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( in Running Ġ&& Ġpoints . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ è´Ŀ å¡ŀ å°Ķ æĽ² çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bezier ( canvas , Ġper , Ġpoints ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Base Tools () Ġ{ ĊĠĠĠĠĠĠĠ Ġline Paint . color Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġline Paint . stroke Width Ġ= Ġ 5 F ĊĠĠĠĠĠĠĠ Ġline Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĊĠĠĠĠĠĠĠ Ġtext Paint . color Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġtext Paint . stroke Width Ġ= Ġ 5 F ĊĠĠĠĠĠĠĠ Ġtext Paint . text Size Ġ= Ġ 5 0 F ĊĠĠĠĠĠĠĠ Ġtext Paint . style Ġ= ĠPaint . Style . FILL ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// éĢļè¿ĩ éĢĴ å½Ĵ æĸ¹æ³ķ ç»ĺ åĪ¶ è´Ŀ å¡ŀ å°Ķ æĽ² çº¿ ĊĠĠĠ Ġprivate Ġfun Ġ Ġdraw Bezier ( canvas : ĠCanvas , Ġper : ĠFloat , Ġpoints : ĠMutable List < Point >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġin Base : ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ å½ĵåīį å±Ĥ çº§ æĺ¯åĲ¦ éľĢè¦ģ ç»ĺ åĪ¶ çº¿ æ®µ ĊĠĠĠĠĠĠĠ Ġif Ġ( level Ġ== Ġ 0 Ġ|| Ġdraw Control ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Base Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Base Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// æł¹æį® å½ĵåīį å±Ĥ çº§ åĴĮ æĺ¯åĲ¦ ä¸º æĹł éĻĲåĪ¶ æ¨¡å¼ı éĢīæĭ© çº¿ æ®µ åıĬ æĸĩåŃĹ çļĦ é¢ľèī² ĊĠĠĠĠĠĠĠ Ġif Ġ( is More ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Paint . color Ġ= Ġ 0 x 3 F 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint . color Ġ= Ġ 0 x 3 F 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Paint . color Ġ= Ġcolor Sequence [ level ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint . color Ġ= Ġcolor Sequence [ level ]. toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ç§»åĬ¨ åĪ° å¼Ģå§ĭ çļĦ ä½įç½® ĊĠĠĠĠĠĠĠ Ġpath . moveTo ( points [ 0 ]. x Ġ, Ġpoints [ 0 ]. y ) ĊĊĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ å½ĵåīį åıªæľī ä¸Ģä¸ª çĤ¹ ĊĠĠĠĠĠĠĠ Ġ// æł¹æį® è´Ŀ å¡ŀ å°Ķ æĽ² çº¿ å®ļä¹ī åı¯ä»¥ å¾Ĺ çŁ¥ æŃ¤ çĤ¹ åľ¨ è´Ŀ å¡ŀ å°Ķ æĽ² çº¿ ä¸Ĭ ĊĠĠĠĠĠĠĠ Ġ// å°Ĩ æŃ¤ çĤ¹ æ·»åĬł åĪ° è´Ŀ å¡ŀ å°Ķ æĽ² çº¿ çĤ¹ éĽĨ ä¸Ń ( é¡µéĿ¢ éĩįæĸ° ç»ĺ åĪ¶ åĲİ ä¹ĭåīį ç»ĺ åĪ¶ çļĦæķ°æį® ä¼ļ ä¸ ¢ å¤± ĠéľĢè¦ģ éĩįæĸ° åĽŀ åİ» åīį æ®µ çļĦ æĽ² çº¿ è·¯å¾Ħ ) ĊĠĠĠĠĠĠĠ Ġ// å°Ĩ å½ĵåīį çĤ¹ ç»ĺ åĪ¶ åĪ° é¡µéĿ¢ ä¸Ń ĊĠĠĠĠĠĠĠ Ġif Ġ( points . size Ġ== Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe zier Points . add ( Point ( points [ 0 ]. x Ġ, Ġpoints [ 0 ]. y )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bezier Point ( bezier Points Ġ, Ġcanvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġ 1 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Point ( points [ 0 ]. x Ġ, Ġpoints [ 0 ]. y Ġ, Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġnext Points : ĠMutable List < Point > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġ// æĽ´æĸ° è·¯å¾Ħ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠ Ġ// è®¡ç®Ĺ ä¸ĭ ä¸Ģ çº§ æİ§åĪ¶ çĤ¹ çļĦ åĿĲæłĩ ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 1 .. points . size Ġ- Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( points [ index ]. x Ġ, Ġpoints [ index ]. y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Point X Ġ= Ġpoints [ index Ġ- Ġ 1 ]. x Ġ-( points [ index Ġ- Ġ 1 ]. x Ġ- Ġpoints [ index ]. x ) Ġ* Ġper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Point Y Ġ= Ġpoints [ index Ġ- Ġ 1 ]. y Ġ-( points [ index Ġ- Ġ 1 ]. y Ġ- Ġpoints [ index ]. y ) Ġ* Ġper ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Points . add ( Point ( next Point X Ġ, Ġnext Point Y )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ æİ§åĪ¶ çĤ¹ çļĦ æĸĩæľ¬ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠ Ġif Ġ(!( level Ġ!= 0 Ġ&& Ġ( per == 0 F Ġ|| Ġper Ġ== Ġ 1 F ) Ġ)) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in Base ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is More Ġ&& Ġlevel Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text (" 0 : 0 ", Ġpoints [ 0 ]. x , Ġpoints [ 0 ]. y , Ġtext Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ("${ char Sequence [ level ]} 0 ", Ġpoints [ 0 ]. x , Ġpoints [ 0 ]. y , Ġtext Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 1 .. points . size Ġ- Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is More Ġ&& Ġlevel Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( Ġ"${ index }:${ index }" Ġ, points [ index ]. x Ġ, Ġpoints [ index ]. y Ġ, Ġtext Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( Ġ"${ char Sequence [ level ]} ${ index }" Ġ, points [ index ]. x Ġ, Ġpoints [ index ]. y Ġ, Ġtext Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ å½ĵåīį å±Ĥ çº§ ĊĠĠĠĠĠĠĠ Ġif Ġ(!( level Ġ!= 0 Ġ&& Ġ( per == 0 F Ġ|| Ġper Ġ== Ġ 1 F ) Ġ)) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in Base ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġline Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpath . reset () ĊĊĠĠĠĠĠĠĠ Ġ// æĽ´æĸ° å±Ĥ çº§ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠ Ġlevel ++ ĊĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ ä¸ĭ ä¸Ģ å±Ĥ ĊĠĠĠĠĠĠĠ Ġdraw Bezier ( canvas , Ġper , Ġnext Points ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ç»ĺ åĪ¶ åīį æ®µ è´Ŀ å¡ŀ å°Ķ æĽ² çº¿ éĥ¨åĪĨ ĊĠĠĠ Ġprivate Ġfun Ġ Ġdraw Bezier Point ( bezier Points : ĠMutable List < Point > Ġ, Ġcanvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpaint B se Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġpaint B se . color Ġ= ĠColor . RED ĊĠĠĠĠĠĠĠ Ġpaint B se . stroke Width Ġ= Ġ 5 F ĊĠĠĠĠĠĠĠ Ġpaint B se . style Ġ= ĠPaint . Style . ST RO KE ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġpath . moveTo ( bezier Points [ 0 ]. x Ġ, Ġbe zier Points [ 0 ]. y ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 1 .. bezier Points . size Ġ- 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( bezier Points [ index ]. x Ġ, Ġbe zier Points [ index ]. y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path Ġ, Ġpaint B se ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// å¼Ģå§ĭ åĬ¨çĶ» ĊĠĠĠ Ġfun Ġchange View () Ġ{ ĊĠĠĠĠĠĠĠ Ġbe zier Points . clear () ĊĠĠĠĠĠĠĠ Ġval Ġva Ġ= ĠValue Animator . of Float ( 0 F , Ġ 1 F ) ĊĠĠĠĠĠĠĠ Ġva . duration Ġ= Ġview Time . to Long () ĊĠĠĠĠĠĠĠ Ġva . interpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġva . add Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġva . start () ĊĠĠĠ Ġ} Ċ }