package Ġcom . li . pie chart Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġjava . text . Decimal Format Ċ Ċ class ĠP ie Chart : ĠView Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġbg : Int Ġ= ĠColor . parse Color ("# 8 f 0 0 8 5 7 7 ") ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtitle Paint : ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġbg Left Ġ= Ġ 1 0 0 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġbg Right Ġ= Ġ 6 2 0 . 0 f ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlist : Mutable List < Pie Chart Bean > ĊĠĠĠ Ġprivate Ġvar Ġall Count Ġ= Ġ 0 . 0 f // æĢ» çļĦ æķ°éĩı ĊĠĠĠ Ġprivate Ġvar Ġscale Ġ= Ġ" 3 . 1 2 %" // åįł æĢ» æķ° çļĦ æ¯Ķ ä¾ĭ r ĊĠĠĠ Ġprivate Ġvar Ġtitle Ġ= Ġ" Pie Chart " ĊĠĠĠ Ġprivate Ġval Ġdecimal Format Ġ= ĠDecimal Format (". 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġring Radio Ġ= Ġ 0 . 0 f // å®Įåħ¨ éĢı æĺİ åľĨ çļĦ åįĬ å¾Ħ ï¼Į åı ł åĬł æĪĲ çİ¯ ĊĠĠĠ Ġprivate Ġvar Ġring Color Ġ= Ġbg // å®Įåħ¨ éĢı æĺİ åľĨ çļĦ é¢ľèī² ï¼Į åı ł åĬł æĪĲ çİ¯ ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ init ()} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ init ()} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ init ()} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt , Ġdef Style Res : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr , ĊĠĠĠĠĠĠĠ Ġdef Style Res ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġm Paint . text Size Ġ= Ġ 2 0 . 0 f ĊĠĠĠĠĠĠĠ Ġm Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Paint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= ĠColor . GRAY ĊĊĠĠĠĠĠĠĠ Ġtitle Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġtitle Paint . text Size Ġ= Ġ 2 0 . 0 f ĊĠĠĠĠĠĠĠ Ġtitle Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtitle Paint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġtitle Paint . color Ġ= ĠColor . GRAY ĊĊĠĠĠĠĠĠĠ Ġlist Ġ= Ġmutable ListOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Size Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Size Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® wrap _ content çļĦ é»ĺè®¤ å®½ Ġ/ Ġ é«ĺ åĢ¼ , é»ĺè®¤ å®½ / é«ĺ çļĦ è®¾ å®ļ å¹¶ æĹł åĽºå®ļ ä¾Ŀ æį® , æł¹æį® éľĢè¦ģ çģ µ æ´» è®¾ç½® ĊĠĠĠĠĠĠĠ Ġval Ġm Width : Int Ġ= Ġ( bg Left + bg Right ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġm Height : Int Ġ= Ġ( bg Left + bg Right ). toInt () ĊĠĠĠĠĠĠĠ Ġ// Ġå½ĵ å¸ĥå±Ģ åıĤæķ° è®¾ç½®ä¸º wrap _ content æĹ¶ ï¼Į è®¾ç½® é»ĺè®¤ åĢ¼ ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Params . width Ġ== ĠViewGroup . LayoutParams . WRAP _ CONTENT Ġ&& Ġlayout Params . height Ġ== ĠViewGroup . LayoutParams . WRAP _ CONTENT ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( m Width , m Height ) ĊĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( layout Params . width Ġ== ĠViewGroup . LayoutParams . WRAP _ CONTENT ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( m Width , height Size ) ĊĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( layout Params . height Ġ== ĠViewGroup . LayoutParams . WRAP _ CONTENT ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( width Size , m Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġval Ġrect 1 : ĠRect F Ġ= ĠRect F ( bg Left , Ġbg Left , Ġbg Right , Ġbg Right ) ĊĠĠĠĠĠĠĠ Ġval Ġtxt Height Ġ= Ġ- title Paint . font Metrics . as cent Ġ- Ġtitle Paint . font Metrics . desc ent ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Color ( bg ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( title )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Text ( title ,( bg Right - bg Left )/ 2 + bg Left - title Paint . measure Text ( title )/ 2 , bg Right + txt Height * 2 , title Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( pie Chart Ġin Ġlist ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġpie Chart . color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsweep Ġ= Ġpie Chart . stop Angle - pie Chart . start Angle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġdecimal Format . format ( sweep / all Count * 1 0 0 )+" %" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Arc ( rect 1 , pie Chart . start Angle , sweep , true , m Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Msg ( pie Chart . start Angle , sweep , pie Chart . msg , canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġring Color ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle (( bg Right - bg Left )/ 2 + bg Left ,( bg Right - bg Left )/ 2 + bg Left , ring Radio , m Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Msg ( start : Float , sweep : Float , msg : String , canvas : ĠCanvas ? ){ ĊĠĠĠĠĠĠĠ Ġval Ġtxt Width Ġ= Ġm Paint . measure Text ( msg ) ĊĠĠĠĠĠĠĠ Ġval Ġtxt Height Ġ= Ġ- m Paint . font Metrics . as cent Ġ- Ġm Paint . font Metrics . desc ent ĊĠĠĠĠĠĠĠ Ġval Ġradio Ġ= Ġ( bg Right - bg Left )/ 2 ĊĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġ(( - start )- sweep / 2 . 0 )* Math . PI / 1 8 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġradio * Math . cos ( angle ) ĊĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġradio * Math . sin ( angle ) ĊĠĠĠĠĠĠĠ Ġvar Ġis Left Ġ= Ġtrue // å·¦ è¾¹ , false åı³ è¾¹ ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġx 1 + bg Left + radio ĊĠĠĠĠĠĠĠ Ġif Ġ( x 1 >= 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Left Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġ- y 1 + bg Left + radio ĊĠĠĠĠĠĠĠ Ġvar Ġstop X Ġ= Ġbg Right + 3 0 . 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġtxt Start : Float Ġ= Ġstop X + 5 ĊĠĠĠĠĠĠĠ Ġif Ġ( is Left ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop X Ġ= Ġbg Left - 3 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Start Ġ= stop X Ġ- Ġtxt Width Ġ- 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Line ( x . toFloat (), y . toFloat (), stop X , y . toFloat (), m Paint ) ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Text ( msg , txt Start , y . toFloat (), m Paint ) ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Text ( scale , txt Start , y . toFloat ()+ txt Height * 3 / 2 , m Paint ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġpush Data ( list : Mutable List < Pie Chart Bean >): Pie Chart { ĊĠĠĠĠĠĠĠ Ġif Ġ( list != null Ġ&& Ġlist . size > 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . list . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . list . addAll ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( pie Ġin Ġthis . list ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Count Ġ+= Ġpie . stop Angle Ġ- Ġpie . start Angle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpie Bg ( p Left : Float , p Right : Float ): Pie Chart { ĊĠĠĠĠĠĠĠ Ġbg Left Ġ= Ġp Left ĊĠĠĠĠĠĠĠ Ġbg Right Ġ= Ġp Right ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġpie Title ( title : String , txt Size : Float , txt Color : Int ): Pie Chart { ĊĠĠĠĠĠĠĠ Ġthis . title Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġtitle Paint . text Size Ġ= Ġtxt Size ĊĠĠĠĠĠĠĠ Ġtitle Paint . color Ġ= Ġtxt Color ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġpie Title ( title : String ): Pie Chart { ĊĠĠĠĠĠĠĠ Ġthis . title Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġback G ( color : ĠInt ): Pie Chart { ĊĠĠĠĠĠĠĠ Ġbg Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġring Size ( size : Float , color : Int ): Pie Chart { ĊĠĠĠĠĠĠĠ Ġring Radio Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġring Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ }