package Ġcom . j ames 6 0 2 1 5 2 0 0 2 . floating label spinner Ċ Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . Bitmap Factory . Options Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . graphics . drawable . Vector Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . style . BackgroundColor Span Ċ import Ġandroid . text . style . Character Style Ċ import Ġandroid . text . style . ForegroundColor Span Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Configuration Ċ import Ġandroid . view . animation . Accel erate Interpolator Ċ import Ġandroid . widget . Spinner Adapter Ċ import Ġandroidx . appcompat . widget . AppCompat Spinner Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . j ames 6 0 2 1 5 2 0 0 2 . floating label spinner . adapter . Hint Adapter Ċ import Ġcom . j ames 6 0 2 1 5 2 0 0 2 . floating label spinner . popup window . Spinner Popup Window Ċ import Ġjava . lang . ref . Soft Reference Ċ import Ġjava . util .* Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round ToInt Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsh iki 6 0 2 1 5 Ġon Ġ 1 7 - 1 2 - 2 2 . Ċ Ġ*/ Ċ class ĠFloating Label Spinner Ġ: ĠAppCompat Spinner Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlabel Horizontal Margin Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlabel Vertical Margin Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġlabel Paint : ĠText Paint ĊĠĠĠ Ġprivate Ġvar Ġdivider Stroke Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġdivider Paint : ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġerror Vertical Margin Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġerror Horizontal Margin Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġerror Paint : ĠText Paint ĊĠĠĠ Ġprivate Ġval Ġicon Paint : ĠPaint ĊĊĠĠĠ Ġvar Ġhint TextColor Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġerror Color Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġright Icon Color Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġhint : ĠCharSequence ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Padding Left Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Padding Top Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Padding Right Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Padding Bottom Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Hint Cell Height Ġ= Ġ- 1 ĊĊĠĠĠ Ġvar Ġanim Duration Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġerror Anim Duration Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠOn ItemSelected Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhint Adapter : ĠHint Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠĠĠ Ġprivate ĠView Ġhint View ; ĊĠĠĠ Ġvar Ġdrop Down Hint View : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Default Ġhint Ġviews ĊĠĠĠ Ġvar Ġdrop Down Hint View ID Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġis Error Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġerror Animator : ĠObject Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġpopup Window : ĠSp inner Popup Window ĊĠĠĠ Ġvar Ġrecursive Mode Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġselected View : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Moving Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġtouch S lop : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġdown X Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdown Y Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġbitmap Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġright Icon Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġright Icon Size Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġsaved Label : ĠCharSequence ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġmust Fill Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġhighlight Color Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġhint Cell Height : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Hint Cell Height () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Hint Cell Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġlabel Text Size Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Padding () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġhint Text Size Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Padding () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġerror Text Size Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Paint . text Size Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Padding () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġfloat Label Anim Percentage Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġerror Percentage Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġthickness : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdivider Stroke Width ĊĠĠĠĠĠĠĠ Ġset ( thickness ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Stroke Width Ġ= Ġthickness ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . stroke Width Ġ= Ġdivider Stroke Width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Padding () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġerror : ĠCharSequence ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġ! TextUtils . isEmpty ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Error Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Layout ChangeListener ( object Ġ: ĠOn Layout ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Layout Change ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Left : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Top : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Right : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Bottom : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v . width Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Error Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . remove On Layout ChangeListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Animator ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Animator Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġmode : ĠInt ) Ġ: Ġsuper ( context , Ġmode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt , Ġmode : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr , ĊĠĠĠĠĠĠĠ Ġmode ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanti Alias Flag Ġ= ĠPaint . ANTI _ ALIAS _ FLAG ĊĠĠĠĠĠĠĠ Ġlabel Paint Ġ= ĠText Paint ( anti Alias Flag ) ĊĠĠĠĠĠĠĠ Ġdivider Paint Ġ= ĠPaint ( anti Alias Flag ) ĊĠĠĠĠĠĠĠ Ġicon Paint Ġ= ĠPaint ( anti Alias Flag ) ĊĠĠĠĠĠĠĠ Ġerror Paint Ġ= ĠText Paint ( anti Alias Flag ) ĊĠĠĠĠĠĠĠ Ġtouch S lop Ġ= ĠView Configuration . get ( context ). scaled Touch S lop ĊĊĠĠĠĠĠĠĠ Ġpopup Window Ġ= ĠSp inner Popup Window ( context ) ĊĠĠĠĠĠĠĠ Ġpopup Window . setBackground Drawable ( Color Drawable ( 0 )) ĊĠĠĠĠĠĠĠ Ġpopup Window . is Outside Touchable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġpopup Window . height Ġ= ĠLayout Params . WRAP _ CONTENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" ResourceType ") ĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Array Ġ= Ġcontext . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . attr . color Control Normal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . attr . color Accent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġprimary Color Ġ= Ġdefault Array . getColor ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġdefault Array . recycle () ĊĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Floating Label Spinner ) ĊĠĠĠĠĠĠĠ Ġlabel Horizontal Margin Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ label _ horizontal _ margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlabel Vertical Margin Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ label _ vertical _ margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġerror Horizontal Margin Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ error _ horizontal _ margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġerror Vertical Margin Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ error _ vertical _ margin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdp 2 px ( 3 f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġhint TextColor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getColor ( R . style able . Floating Label Spinner _ j _ fl s _ textColor Hint , ĠColor . GRAY ) ĊĠĠĠĠĠĠĠ Ġhighlight Color Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ color Highlight , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Color ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġerror Color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getColor ( R . style able . Floating Label Spinner _ j _ fl s _ color Error , ĠColor . RED ) ĊĠĠĠĠĠĠĠ Ġright Icon Color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getColor ( R . style able . Floating Label Spinner _ j _ fl s _ right Icon Tint , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġhint Ġ= Ġtyped Array . getString ( R . style able . Floating Label Spinner _ j _ fl s _ hint ) ĊĠĠĠĠĠĠĠ Ġdivider Stroke Width Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ thickness , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdp 2 px ( 2 f ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlabel Text Size Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ label _ text Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp 2 Px ( 1 6 f ) ĊĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠ Ġhint Text Size Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ hint _ text Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp 2 Px ( 2 0 f ) ĊĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠ Ġerror Text Size Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ error _ text Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp 2 Px ( 1 6 f ) ĊĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠ Ġdivider Paint . stroke Width Ġ= Ġdivider Stroke Width . toFloat () ĊĠĠĠĠĠĠĠ Ġlabel Paint . text Size Ġ= Ġhint Text Size ĊĠĠĠĠĠĠĠ Ġerror Paint . text Size Ġ= Ġerror Text Size ĊĠĠĠĠĠĠĠ Ġdrop Down Hint View ID Ġ= Ġtyped Array . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Floating Label Spinner _ j _ fl s _ dropDown Hint View , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . drop _ down _ hint _ view ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġanim Duration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getInteger ( R . style able . Floating Label Spinner _ j _ fl s _ float _ anim _ duration , Ġ 8 0 0 ) ĊĠĠĠĠĠĠĠ Ġerror Anim Duration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getInteger ( R . style able . Floating Label Spinner _ j _ fl s _ error _ anim _ duration , Ġ 8 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġrecursive Mode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getBoolean ( R . style able . Floating Label Spinner _ j _ fl s _ recursive , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsaved Label Ġ= Ġhint ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . getBoolean ( R . style able . Floating Label Spinner _ j _ fl s _ must _ fill _ type , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmust Fill Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint Ġ= ĠSp ann able String ( saved Label . toString () Ġ+ Ġ" Ġ* "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Span ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFore ground Color Span ( Color . RED ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ- Ġ 1 , Ġlength , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( anim Duration Ġ< Ġ 0 ) Ġanim Duration Ġ= Ġ 8 0 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( error Anim Duration Ġ< Ġ 0 ) Ġerror Anim Duration Ġ= Ġ 8 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġbackground Typed Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attrs , Ġint ArrayOf ( android . R . attr . background )) ĊĠĠĠĠĠĠĠ Ġbackground Typed Array . get Drawable ( 0 )?. let Ġ{ Ġbackground Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Background ( background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Background Drawable ( background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġset BackgroundColor ( 0 ) ĊĠĠĠĠĠĠĠ Ġbackground Typed Array . recycle () ĊĊĠĠĠĠĠĠĠ Ġon ItemSelected Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĊĠĠĠĠĠĠĠ Ġval Ġpadding Array Ġ= Ġcontext . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . attr . padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . attr . padding Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . attr . padding Top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . attr . padding Right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . attr . padding Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( padding Array . hasValue ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Bottom Ġ= Ġpadding Array . get Dimension Pixel Offset ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Right Ġ= Ġm Padding Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Top Ġ= Ġm Padding Right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Left Ġ= Ġm Padding Top ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Left Ġ= Ġ( if Ġ( padding Array . hasValue ( 1 )) Ġpadding Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Top Ġ= Ġ( if Ġ( padding Array . hasValue ( 2 )) Ġpadding Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Right Ġ= Ġ( if Ġ( padding Array . hasValue ( 3 )) Ġpadding Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Bottom Ġ= Ġ( if Ġ( padding Array . hasValue ( 4 )) Ġpadding Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpadding Array . recycle () ĊĠĠĠĠĠĠĠ Ġupdate Padding () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Paint Locale ( locale : ĠLocale ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Paint . text Locale Ġ= Ġlocale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Paint . text Locale Ġ= Ġlocale ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdp 2 px ( dp Value : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 . 5 f Ġ+ Ġdp Value Ġ* Ġresources . display Metrics . density ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsp 2 Px ( sp Value : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( sp Value Ġ* Ġresources . display Metrics . scaled Density ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Padding ( left : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Padding Left Ġ= Ġleft ĊĠĠĠĠĠĠĠ Ġm Padding Top Ġ= Ġtop ĊĠĠĠĠĠĠĠ Ġm Padding Right Ġ= Ġright ĊĠĠĠĠĠĠĠ Ġm Padding Bottom Ġ= Ġbottom ĊĠĠĠĠĠĠĠ Ġsuper . set Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft , Ġtop Ġ+ Ġlabel Vertical Margin Ġ+ Ġlabel Text Size . toInt (), Ġright , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ+ Ġdivider Stroke Width Ġ+ Ġerror Text Size . toInt () Ġ+ Ġ( error Vertical Margin Ġshl Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Padding () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Left , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Top , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġdispatch Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( float Label Anim Percentage Ġ!= Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected View ?. alpha Ġ= Ġif Ġ( selected Item Position Ġ!= Ġ 0 ) Ġfloat Label Anim Percentage Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . dispatch Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġlabel Paint . color Ġ= Ġhint TextColor ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Text Size Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint Text Size Ġ+ Ġ( label Text Size Ġ- Ġhint Text Size ) Ġ* Ġfloat Label Anim Percentage ĊĠĠĠĠĠĠĠ Ġlabel Paint . text Size Ġ= Ġcurrent Text Size ĊĠĠĠĠĠĠĠ Ġval Ġlabel Paint Dy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Padding Top Ġ+ Ġcurrent Text Size Ġ+ Ġ( 1 Ġ- Ġfloat Label Anim Percentage ) Ġ* Ġ( m Hint Cell Height Ġ* Ġ. 5 f )). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( hint Ġ!= Ġnull ) Ġdraw Sp ann able String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Paint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Horizontal Margin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Paint Dy ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdivider Y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Padding Top Ġ+ Ġlabel Text Size Ġ+ Ġlabel Vertical Margin Ġ+ Ġ( divider Stroke Width Ġshr Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġif Ġ( m Hint Cell Height Ġ> Ġ 0 ) Ġm Hint Cell Height . toFloat () Ġelse Ġhint Text Size ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . color Ġ= Ġhighlight Color ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . color Ġ= Ġerror Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Paint Dy Ġ= Ġ( divider Y Ġ+ Ġerror Text Size Ġ+ Ġerror Vertical Margin ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Text Width Ġ= Ġerror Paint . measure Text ( error . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhint Repeat Space Width Ġ= Ġwidth Ġ/ Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Dx Ġ= Ġhint Repeat Space Width Ġ+ Ġerror Text Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart X Ġ= Ġerror Horizontal Margin Ġ- Ġ( max Dx Ġ* Ġerror Percentage ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Paint . color Ġ= Ġerror Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Animator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Horizontal Margin Ġ> Ġ 0 Ġ&& Ġerror Paint . shader Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmargin Ratio Ġ= Ġerror Horizontal Margin . toFloat () Ġ/ Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgradient Ratio Ġ= Ġ. 0 2 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshader Ġ= ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( 0 , Ġerror Color , Ġerror Color , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Ratio , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Ratio Ġ+ Ġgradient Ratio , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġmargin Ratio Ġ- Ġgradient Ratio , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġmargin Ratio ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . CLAMP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Paint . shader Ġ= Ġshader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( error Horizontal Margin Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Paint . shader Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Sp ann able String ( canvas , Ġerror , Ġerror Paint , Ġstart X , Ġerror Paint Dy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start X Ġ< Ġ 0 Ġ&& Ġstart X Ġ+ Ġmax Dx Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Sp ann able String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Paint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( start X Ġ+ Ġmax Dx ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Paint Dy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas . draw Line ( 0 f , Ġdivider Y , Ġwidth . toFloat (), Ġdivider Y , Ġdivider Paint ) ĊĠĠĠĠĠĠĠ Ġdraw Right Icon ( canvas , Ġdivider Y , Ġm Hint Cell Height . toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Sp ann able String ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġhint : ĠCharSequence ?, ĊĠĠĠĠĠĠĠ Ġpaint : ĠText Paint , ĊĠĠĠĠĠĠĠ Ġstart _ x : ĠInt , ĊĠĠĠĠĠĠĠ Ġstart _ y : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġeach Ġspan Ġone Ġat Ġa Ġtime ĊĠĠĠĠĠĠĠ Ġvar Ġel lp Hint Ġ= Ġhint ĊĠĠĠĠĠĠĠ Ġvar Ġnext : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġx Start Ġ= Ġstart _ x . toFloat () ĊĠĠĠĠĠĠĠ Ġvar Ġx End : ĠFloat ĊĠĠĠĠĠĠĠ Ġif Ġ( paint Ġ!== Ġerror Paint ) Ġel lp Hint Ġ= ĠText Utils . el lip size ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġel lp Hint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( width Ġ- Ġm Padding Left Ġ- Ġm Padding Right Ġ- Ġlabel Horizontal Margin ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Utils . Truncate At . END ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ell p Hint Ġis ĠSp ann able String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= Ġel lp Hint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġsp ann able String . length ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfind Ġthe Ġnext Ġspan Ġtransition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġsp ann able String . next Span Transition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able String . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCharacter Style :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmeasure Ġthe Ġlength Ġof Ġthe Ġspan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx End Ġ= Ġx Start Ġ+ Ġpaint . measure Text ( span nable String , Ġi , Ġnext ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġthe Ġhighlight Ġ( background Ġcolor ) Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbg Spans Ġ= Ġsp ann able String . get Spans ( i , Ġnext , ĠBackground Color Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bg Spans . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Highlight Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Highlight Paint . color Ġ= Ġbg Spans [ 0 ]. backgroundColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart _ y Ġ+ Ġpaint . font Metrics . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx End , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart _ y Ġ+ Ġpaint . font Metrics . bottom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Highlight Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġthe Ġtext Ġwith Ġan Ġoptional Ġforeground Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfg Spans Ġ= Ġsp ann able String . get Spans ( i , Ġnext , ĠFore ground Color Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fg Spans . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Color Ġ= Ġpaint . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġfg Spans [ 0 ]. foreground Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( span nable String , Ġi , Ġnext , Ġx Start , Ġstart _ y . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġsave Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( span nable String , Ġi , Ġnext , Ġx Start , Ġstart _ y . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Start Ġ= Ġx End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġel lp Hint ?. let Ġ{ Ġcanvas . draw Text ( it , Ġ 0 , Ġit . length , Ġx Start , Ġstart _ y . toFloat (), Ġpaint ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Right Icon ( canvas : ĠCanvas , Ġdivider Y : ĠFloat , Ġhint _ cell _ height : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġright Icon Bitmap ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , Ġ( width Ġ- Ġm Padding Right Ġ- Ġright Icon Size ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Y Ġ- Ġ( hint _ cell _ height Ġ+ Ġbitmap Height ) Ġ* Ġ 0 . 6 5 f , Ġicon Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset On ItemSelected Listener ( listener : ĠOn ItemSelected Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Hint Cell Height () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Hint Cell Height Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint Adapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getView ( 1 , Ġnull , Ġnull )?. let Ġ{ Ġfirst Child Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= ĠMeasure Spec . make Measure Spec ( 0 , ĠMeasure Spec . UNSPECIFIED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Child . measure ( w , Ġw ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Hint Cell Height Ġ= Ġfirst Child . meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Label Margins ( horizontal _ margin : ĠInt , Ġvertical _ margin : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlabel Horizontal Margin Ġ= Ġhorizontal _ margin ĊĠĠĠĠĠĠĠ Ġlabel Vertical Margin Ġ= Ġvertical _ margin ĊĠĠĠĠĠĠĠ Ġupdate Padding () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetError Margin ( horizontal _ margin : ĠInt , Ġvertical _ margin : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Horizontal Margin Ġ= Ġhorizontal _ margin ĊĠĠĠĠĠĠĠ Ġerror Vertical Margin Ġ= Ġvertical _ margin ĊĠĠĠĠĠĠĠ Ġupdate Padding () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset DropDown Hint View ( m DropDown Hint View : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrop Down Hint View ID Ġ= Ġm DropDown Hint View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Hint (): ĠCharSequence ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhint ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Hint ( hint : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . hint Ġ= Ġhint ĊĠĠĠĠĠĠĠ Ġhint Adapter ?. set Hint ( hint ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Anim Duration ( ANIM _ DURATION : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanim Duration Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN IM _ DURATION Ġ< Ġ 0 Ġ-> Ġ 8 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠAN IM _ DURATION ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetError Anim Duration ( ERROR _ ANIM _ DURATION : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Anim Duration Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠERROR _ ANIM _ DURATION Ġ< Ġ 0 Ġ-> Ġ 8 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠERROR _ ANIM _ DURATION ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Adapter ( adapter : ĠSp inner Adapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġis ĠHint Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . setAdapter ( adapter ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint Adapter Ġ= ĠHint Adapter ( context , Ġthis , Ġadapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . setAdapter ( hint Adapter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhint Adapter ?. set Hint ( hint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Error Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Length Ġ= Ġerror Paint . measure Text ( error . toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġif Ġ( error Length Ġ> Ġwidth Ġ- Ġ( error Horizontal Margin Ġshl Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Percentage Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Animator Ġ?: Ġkotlin . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Animator Ġ= ĠObject Animator . of Float ( this , Ġ" error Percentage ", Ġ 0 f , Ġ 1 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠValue Animator . INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= ĠValue Animator . RE START ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Delay Ġ= Ġanim Duration . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ( error Anim Duration Ġ* Ġerror Length Ġ/ Ġwidth ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Click (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle Popup Window () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Long Click (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle Popup Window () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Long Click ( x : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle Popup Window () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Moving Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown X Ġ= Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Y Ġ= Ġevent . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġif Ġ(! is Moving Ġ&& Ġ( abs ( event . raw X Ġ- Ġdown X ) Ġ> Ġtouch S lop Ġ|| Ġabs ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . raw Y Ġ- Ġdown Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ> Ġtouch S lop ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Moving Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġif Ġ(! is Moving ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Popup Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġhint Adapter Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġwhen Ġ( popup Window . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Popup Window () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Popup Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ!= ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT Ġ&& Ġ! is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmargin Ġ= Ġdp 2 px ( 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcard Margin Below L ol lip op Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ 0 Ġelse Ġdp 2 px ( 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-( error Text Size . round ToInt () Ġ+ Ġ( error Vertical Margin Ġshl Ġ 1 ) Ġ+ Ġm Padding Bottom Ġ+ Ġmargin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġif Ġ( card Margin Below L ol lip op Ġ!= Ġ 0 ) Ġcard Margin Below L ol lip op Ġ+ Ġdp 2 px ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse Ġcard Margin Below L ol lip op ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . width Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġm Padding Left Ġ- Ġm Padding Right Ġ+ Ġ( card Margin Below L ol lip op Ġ+ Ġmargin Ġshl Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . height Ġ= ĠLayout Params . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hint Adapter Ġ!= Ġnull Ġ&& Ġhint Adapter Ġ!= Ġpopup Window . hint Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . setAdapter ( this , Ġhint Adapter , Ġmargin , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . show As DropDown ( this , Ġ-( card Margin Below L ol lip op Ġ+ Ġmargin ), Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . content View ?. findViewById < View >( R . id . list _ view )?. request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlayout Spinner View ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Selected View () ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġselected Item Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected View Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFloating Label Spinner :: class . java . super class ?. super class ?. super class ?. super class ?. getDeclared Field ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" m Next Selected Position " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. let Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield [ this ] Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġget Selected View () ĊĠĠĠĠĠĠĠ Ġlayout Selected View () ĊĠĠĠĠĠĠĠ Ġmeasure Hint Cell Height () ĊĠĠĠĠĠĠĠ Ġif Ġ( float Label Anim Percentage Ġ== Ġ 0 f Ġ&& Ġposition Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animator ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( position Ġ== Ġ 0 Ġ&& Ġfloat Label Anim Percentage Ġ!= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animator ( 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġif Ġ(! recursive Mode ) Ġpopup Window Ġ= Ġnull Ċ // ĠĠĠĠĠĠĠ Ġif Ġ(! recursive Mode ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . dismiss () Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Animator ( start Value : ĠFloat , Ġend Value : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠObject Animator . of Float ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Floating Label Spinner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" float Label Anim Percentage ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Value ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġanim ator . interpol ator Ġ= ĠAccel erate Interpolator ( 3 f ) ĊĠĠĠĠĠĠĠ Ġanim ator . duration Ġ= Ġanim Duration . to Long () ĊĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Selection ( position : ĠInt , Ġanimate : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Selection ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Selection ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( recursive Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlistener ?. on ItemSelected ( this , Ġthis , Ġposition , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġlayout Spinner View ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Selected View () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( selected View Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġremove All Views In Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Selected View (): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġselected View Ġ= Ġhint Adapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . count Ġ== Ġ 0 Ġ-> Ġselected View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Position Ġ< Ġ 0 Ġ-> Ġit . getView ( 0 , Ġselected View , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Position Ġin Ġ 0 .. it . count Ġ-> Ġit . getView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . getSelected View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsuper . getSelected View () ĊĠĠĠĠĠĠĠ Ġreturn Ġselected View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( recursive Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify DataSet Changed () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġpopup Window . dismiss () Ċ // ĠĠĠĠĠĠĠ Ġshow Popup Window () Ċ Ċ // ĠĠĠĠĠĠĠ Ġpopup Window . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĢĴ å½Ĵ æ¨¡å¼ı éģ¿åħį æĽ´æĸ° éĢĤ éħį åĻ¨ çļĦ æİ§ä»¶ ç»ĺ åĪ¶ åĪ° spinner çļĦ çĶ» éĿ¢ ï¼Į éĢīæĭ© åħĪ éĩįæĸ° æĺ¾ç¤º popup window ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecursive Mode Ġ&& Ġpopup Window . is Showing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Popup Window () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpopup Window . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( recursive Mode ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġshow Popup Window () Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . notify DataSet Changed () Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrop Down Hint View ?. invalidate () Ċ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( recursive Mode ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġshow Popup Window () Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlayout Selected View () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġit . layout Params Ġ?: Ġgenerate Default LayoutParams () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġadd View In Layout ( selected View , Ġ 0 , Ġlp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove All Views In Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View In Layout ( it , Ġ- 1 , Ġlp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= ĠMeasure Spec . make Measure Spec ( 0 , ĠMeasure Spec . UNSPECIFIED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . measure ( w , Ġw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġicon Size Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Icon Bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size Ġ= Ġright Icon Size Ġ- Ġ( m Padding Right Ġshl Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġm Padding Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġ( m Padding Top Ġ+ Ġlabel Text Size Ġ+ Ġlabel Vertical Margin ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġm Padding Left Ġ+ Ġit . meas ured Width Ġ- Ġicon Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġtop Ġ+ Ġit . meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Right Icon ( drawable ID : ĠInt , Ġclear _ btn _ width : ĠInt , Ġalpha : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġright Icon Size Ġ= Ġclear _ btn _ width ĊĠĠĠĠĠĠĠ Ġicon Paint . alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠContext Compat . get Drawable ( context , Ġdrawable ID ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠDrawable Ġdrawable Ġ= ĠVector Drawable Compat . create ( getResources (), drawable ID , null ) Ġ; ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠOptions () ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġsample Bitmap Ġ= Ġcreate Bitmap ( drawable , Ġresources , Ġdrawable ID , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġvar Ġsample Size Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġoptions . out Width ĊĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġoptions . out Height ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP Ġ&& Ġdrawable Ġis ĠVector Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġdrawable . get Intr insic Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġdrawable . get Intr insic Height () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbitmap Height Ġ= Ġ( height Ġ* Ġclear _ btn _ width Ġ/ Ġwidth ) ĊĠĠĠĠĠĠĠ Ġval Ġdestination Height Ġ= Ġbitmap Height ĊĠĠĠĠĠĠĠ Ġif Ġ( height Ġ> Ġdestination Height Ġ|| Ġwidth Ġ> Ġclear _ btn _ width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Height Ġ= Ġheight Ġshr Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Width Ġ= Ġwidth Ġshr Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( half Height Ġ/ Ġsample Size Ġ> Ġdestination Height Ġ&& Ġhalf Width Ġ/ Ġsample Size Ġ> Ġclear _ btn _ width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Size Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsample Bitmap ?. recycle () ĊĠĠĠĠĠĠĠ Ġoptions . in Sample Size Ġ= Ġsample Size ĊĠĠĠĠĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġcreate Bitmap ( drawable , Ġresources , Ġdrawable ID , Ġoptions )?. let Ġ{ Ġold Bitmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġold Bitmap . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġold Bitmap . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale X Ġ= Ġclear _ btn _ width . toFloat () Ġ/ Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Y Ġ= Ġdestination Height . toFloat () Ġ/ Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Scale ( scale X , Ġscale Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Icon Color Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Paint . color Filter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort er D uff Color Filter ( right Icon Color , ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Icon Bitmap Ġ= ĠSoft Reference ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( old Bitmap , Ġ 0 , Ġ 0 , Ġwidth , Ġheight , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). get () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Bitmap ( ĊĠĠĠĠĠĠĠ Ġdrawable : ĠDrawable ?, ĊĠĠĠĠĠĠĠ Ġresources : ĠResources , ĊĠĠĠĠĠĠĠ Ġdrawable Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġoptions : ĠOptions ĊĠĠĠ Ġ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( drawable Ġis ĠBitmap Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Bitmap ( resources , Ġdrawable Id , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP Ġ&& Ġdrawable Ġis ĠVector Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Vector Bitmap ( drawable ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" unsupported Ġdrawable Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bitmap ( resources : ĠResources , Ġdrawable Id : ĠInt , Ġoptions : ĠOptions ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSoft Reference ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Resource ( resources , Ġdrawable Id , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġ). get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġprivate Ġfun Ġget Vector Bitmap ( vector Drawable : ĠVector Drawable ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvector Drawable . intrinsic Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvector Drawable . intrinsic Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠ Ġvector Drawable . setBounds ( 0 , Ġ 0 , Ġcanvas . width , Ġcanvas . height ) ĊĠĠĠĠĠĠĠ Ġvector Drawable . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Must Fill Mode ( is Must Fill : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . must Fill Ġ= Ġis Must Fill ĊĠĠĠĠĠĠĠ Ġupdate Label () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Label () Ġ{ ĊĠĠĠĠĠĠĠ Ġhint Ġ= Ġwhen Ġ( must Fill ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able String ( saved Label . toString () Ġ+ Ġ" Ġ* "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Span ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFore ground Color Span ( Color . RED ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlength , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaved Label ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} Ċ }