package Ġcom . ale xz ait se v . me tern umber picker ĊĊ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ Ċ class ĠMeter View Ġ: ĠLinearLayout Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠnumberOf First Ġ= ĠDEFAULT _ NUMBER _ OF _ BLACK ĊĠĠĠ Ġprivate Ġvar ĠnumberOf Second Ġ= ĠDEFAULT _ NUMBER _ OF _ RED ĊĠĠĠ Ġprivate Ġvar Ġfirst Color Ġ= ĠDEFAULT _ BLACK _ COLOR ĊĠĠĠ Ġprivate Ġvar Ġshow Divider Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġdivider Color Ġ= Ġfirst Color ĊĠĠĠ Ġprivate Ġvar Ġdivider Text : ĠCharSequence ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsecond Color Ġ= ĠDEFAULT _ RED _ COLOR ĊĠĠĠ Ġprivate Ġvar Ġenabled Ġ= ĠDEFAULT _ ENABLED ĊĊĠĠĠ Ġprivate Ġvar Ġpicker Style Id Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġval Ġpicker List : ĠMutable List < Meter Number Picker > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġcurrent Ġvalue Ġof Ġthe Ġwidget . ĠWorks Ġonly Ġif Ġ" m np _ max " Ġis Ġnot Ġbigger Ġthen Ġ 9 . ĊĠĠĠĠ Ġ* ĠFor Ġother Ġcases Ġyou Ġhave Ġto Ġextend Ġthis Ġview Ġfor Ġnow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġcurrent Ġvalue Ġto Ġthe Ġwidget . ĠWorks Ġonly Ġif Ġ" m np _ max " Ġis Ġnot Ġbigger Ġthen Ġ 9 . ĊĠĠĠĠ Ġ* ĠFor Ġother Ġcases Ġyou Ġhave Ġto Ġextend Ġthis Ġview Ġfor Ġnow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġvalue : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Indexed Ġ{ Ġindex , Ġpicker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactor Ġ= ĠMath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pow ( 1 0 . 0 , Ġ( picker List . size Ġ- Ġindex Ġ- Ġ 1 ). toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġpicker . value Ġ* Ġfactor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Indexed Ġ{ Ġindex , Ġpicker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactor Ġ= ĠMath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pow ( 1 0 . 0 , Ġ( picker List . size Ġ- Ġindex Ġ- Ġ 1 ). toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġ( value Ġ/ Ġfactor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 Ġ&& Ġnumber Ġ> Ġ 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Number Ġof Ġdigits Ġcannot Ġbe Ġgreater Ġthen Ġpick ers Ġnumber ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ-= Ġ( number Ġ* ĠMath . pow ( 1 0 . 0 , Ġ( picker List . size Ġ- Ġindex Ġ- Ġ 1 ). toDouble ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpicker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value Ġ= Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . LO L LI POP ) Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt , Ġdef Style Res : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠLinearLayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. HORIZONTAL ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. obtain Styled Attributes ( attrs , ĠR . style able . Meter View , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf First Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInt ( R . style able . Meter View _ mv _ numberOf First , ĠnumberOf First ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Second Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInt ( R . style able . Meter View _ mv _ numberOf Second , ĠnumberOf Second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Color Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getColor ( R . style able . Meter View _ mv _ first Color , Ġfirst Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Color Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getColor ( R . style able . Meter View _ mv _ divider Color , Ġfirst Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Divider Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean ( R . style able . Meter View _ mv _ show Divider , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Text Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getText ( R . style able . Meter View _ mv _ divider Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Color Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getColor ( R . style able . Meter View _ mv _ second Color , Ġsecond Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker Style Id Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource Id ( R . style able . Meter View _ mv _ picker Style , Ġpicker Style Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean ( R . style able . Meter View _ mv _ enabled , Ġenabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpopulate ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clear () ĊĊĠĠĠĠĠĠĠ Ġvar Ġtext Size Ġ= Ġ- 1 F ĊĠĠĠĠĠĠĠ Ġvar ĠtextColor Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠnumberOf First ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeter Number Picker Ġ= Ġcreate Picker ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġmeter Number Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text Size ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= Ġmeter Number Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeter Number Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set BackgroundColor ( first Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeter Number Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEnabled Ġ= Ġis Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= ĠLinearLayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. LayoutParams ( LinearLayout . LayoutParams . WRAP _ CONTENT , ĠLinearLayout . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( meter Number Picker , Ġlp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( meter Number Picker ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( show Divider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdivider View Ġ= ĠTextView ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set BackgroundColor ( divider Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. gravity Ġ= ĠGr avity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTextColor ( textColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text Size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġtext Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġdivider View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Padding ( 8 , Ġ 0 , Ġ 8 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= ĠLinearLayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. LayoutParams ( LinearLayout . LayoutParams . WRAP _ CONTENT , ĠLinearLayout . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( divider View , Ġlp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠnumberOf Second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeter Number Picker Ġ= Ġcreate Picker ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeter Number Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set BackgroundColor ( second Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeter Number Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEnabled Ġ= Ġis Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= ĠLinearLayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. LayoutParams ( LinearLayout . LayoutParams . WRAP _ CONTENT , ĠLinearLayout . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( meter Number Picker , Ġlp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( meter Number Picker ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Picker ( context : ĠContext ): ĠMeter Number Picker Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( picker Style Id Ġ== Ġ- 1 ) ĠMeter Number Picker ( context ) Ġelse ĠMeter Number Picker ( context , Ġpicker Style Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enabled Ġ= Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! enabled Ġ|| Ġsuper . on Intercept Touch Event ( ev ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Numbers Of ( numberOf First : ĠInt , ĠnumberOf Second : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. numberOf First Ġ= ĠnumberOf First ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. numberOf Second Ġ= ĠnumberOf Second ĊĠĠĠĠĠĠĠ Ġremove All Views () ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ NUMBER _ OF _ BLACK Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ NUMBER _ OF _ RED Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ BLACK _ COLOR Ġ= Ġ- 0 x 1 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ RED _ COLOR Ġ= Ġ- 0 x 3 4 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ TEXT _ COLOR Ġ= Ġ- 0 x FFFFFF ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ ENABLED Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ