package Ġcom . example . android _ study . ui _ custom . demo . standard . spider _ web Ċ Ċ 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 Ġcom . example . android _ study ._ base . util . dp 2 px Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ Ċ /** Ċ Ġ* ĠAuthor : create Ġby ĠR hy thm Coder Ċ Ġ* ĠDate : 2 0 2 1 / 2 / 7 Ċ Ġ* ĠDescription : Ċ Ġ*/ Ċ class ĠSp ider View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcenter X Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcenter Y Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmax Radius Ġ= Ġ 0 f ĊĊĠĠĠ Ġ// æķ°æį® åıĤæķ° ĊĠĠĠ Ġprivate Ġvar Ġm Data Max Ġ= Ġ 5 ĊĠĠĠ Ġprivate Ġvar Ġpolygon Num Ġ= Ġ 5 ĊĠĠĠ Ġprivate Ġvar Ġpolygon Angle Ġ= Ġ 3 6 0 Ġ/ Ġpolygon Num ĊĠĠĠ Ġvar Ġm Data : ĠArray < Int > Ġ= ĠarrayOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Data Max Ġ= Ġfield . max OrNull () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpolygon Num Ġ= Ġfield . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpolygon Angle Ġ= Ġ 3 6 0 Ġ/ Ġpolygon Num ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġpath Polygon Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġval Ġpath Point Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġval Ġm Paint Polygon Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 2 f . dp 2 px (). toFloat () ĊĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġm Paint Data Re go in Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . arg b ( 1 1 7 , Ġ 2 5 5 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Paint Point Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . arg b ( 2 3 0 , Ġ 1 5 0 , Ġ 1 5 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcenter X Ġ= Ġw Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġcenter Y Ġ= Ġh Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġmax Radius Ġ= ĠMath . min ( w , Ġh ) Ġ/ Ġ 2 Ġ* Ġ 0 . 9 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// 1 . è¾¹ çº¿ ĊĠĠĠĠĠĠĠ Ġdraw Polygon ( canvas ) ĊĠĠĠĠĠĠĠ Ġ// 2 Ġå¯¹ è§Ĵ çº¿ ĊĠĠĠĠĠĠĠ Ġdraw Line ( canvas ) ĊĠĠĠĠĠĠĠ Ġ// 3 Ġæķ°æį® ĊĠĠĠĠĠĠĠ Ġdraw Region ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Polygon ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( polygon Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeach Radius Ġ= Ġmax Radius Ġ/ Ġpolygon Num Ġ* Ġit . plus ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Polygon . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ¯ı æĿ¡ è¾¹ çº¿ çļĦ äº¤ çĤ¹ æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( polygon Num ) Ġ{ Ġinner Index Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inner Index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Polygon . moveTo ( center X . toFloat () Ġ+ Ġeach Radius , Ġcenter Y . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfx Ġ= Ġ( center X Ġ+ Ġeach Radius Ġ* Ġcos ( Math . to Radians ( polygon Angle . toDouble ()) Ġ* Ġinner Index )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfy Ġ= Ġ( center Y Ġ+ Ġeach Radius Ġ* Ġsin ( Math . to Radians ( polygon Angle . toDouble ()) Ġ* Ġinner Index )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Polygon . lineTo ( fx , Ġfy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Polygon . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path Polygon , Ġm Paint Polygon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Line ( canvas : ĠCanvas ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrepeat ( polygon Num ) Ġ{ inner Index -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Polygon . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Polygon . moveTo ( center X . toFloat (), Ġcenter Y . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfx Ġ= Ġ( center X Ġ+ Ġmax Radius Ġ Ġ* Ġcos ( Math . to Radians ( polygon Angle . toDouble ()) Ġ* Ġinner Index )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfy Ġ= Ġ( center Y Ġ+ Ġmax Radius Ġ Ġ* Ġsin ( Math . to Radians ( polygon Angle . toDouble ()) Ġ* Ġinner Index )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Polygon . lineTo ( fx , fy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path Polygon , m Paint Polygon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Region ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Point . reset () ĊĠĠĠĠĠĠĠ Ġrepeat ( m Data . size ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġm Data [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Percent Ġ= Ġdata Ġ/ Ġm Data Max . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Length Ġ= Ġdata Percent Ġ* Ġmax Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġcenter X Ġ+ Ġdata Length Ġ* Ġcos ( Math . to Radians ( polygon Angle . toDouble () Ġ* Ġindex )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġcenter Y Ġ+ Ġdata Length Ġ* Ġsin ( Math . to Radians ( polygon Angle . toDouble () Ġ* Ġindex )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Point . moveTo ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Point . lineTo ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x , Ġy , Ġ 8 f . dp 2 px (). toFloat (), Ġm Paint Point ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpath Point . close () ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path Point , Ġm Paint Data Re go in ) ĊĠĠĠ Ġ} Ċ }