package Ġcom . g ow tham . library . ui Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . Motion Event .* Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . graphics . drawable . to Bitmap Ċ import Ġcom . g ow tham . library . R Ċ import Ġkotlin . math . abs Ċ Ċ @ Suppress Lint (" AppCompat Custom View ") Ċ open Ġclass ĠDouble Value Seek Bar View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġdef Style Res : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ BASE _ COLOR Ġ= ĠColor . GRAY ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ FILL _ COLOR Ġ= ĠColor . RED ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ TEXT _ COLOR Ġ= ĠColor . DK GRAY ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CIR CLE _ COLOR Ġ= ĠColor . GREEN ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MIN _ VALUE Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MAX _ VALUE Ġ= Ġ 1 0 0 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MAX _ STEP _ VALUE Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ MIN _ STEP _ VALUE Ġ= Ġ 1 f ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġborder Rect Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġvar Ġleft Thumb Icon : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġright Thumb Icon : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġleft Thumb Rect Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġval Ġright Thumb Rect Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġvar Ġseek Bar Touch Enabled Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġpressed Thumb : ĠThumb ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Active Pointer Id Ġ= ĠINVALID _ POINTER _ ID ĊĠĠĠ Ġprivate Ġvar Ġpointer Index Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġis Dragging Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġmin Value To Draw : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar ĠmaxValue To Draw : ĠFloat Ġ= Ġ 1 0 0 f ĊĊĊĠĠĠ Ġprivate Ġvar Ġbar Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcircle Radius : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcircle Text Size : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdefault Padding : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġbar Base Paint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġbar Fill Paint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġmin Circle Paint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġmax Circle Paint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġmin Value Paint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar ĠmaxValue Paint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġthumb Icon Paint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĊĠĠĠ Ġprivate Ġvar Ġm On Double Value Seek Bar View ChangeListener : ĠOn Double Value Seek Bar ChangeListener ? Ġ= Ġnull ĊĊĊĠĠĠ Ġvar Ġmax Duration : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġmin Step : ĠFloat Ġ= ĠDEFAULT _ MIN _ STEP _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġmax Step : ĠFloat Ġ= ĠDEFAULT _ MAX _ STEP _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar ĠmaxValue : ĠFloat Ġ= ĠDEFAULT _ MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmin Value : ĠFloat Ġ= ĠDEFAULT _ MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbase Color : ĠInt Ġ= ĠDEFAULT _ BASE _ COLOR ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbar Base Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġfill Color : ĠInt Ġ= ĠDEFAULT _ FILL _ COLOR ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbar Fill Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġcircle TextColor : ĠInt Ġ= ĠDEFAULT _ TEXT _ COLOR ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcircle Fill Color : ĠInt Ġ= ĠDEFAULT _ CIR CLE _ COLOR ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Circle Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Circle Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent MinValue : ĠFloat Ġ= ĠDEFAULT _ MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ> Ġcurrent MaxValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠnewValue Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ< Ġmin Value Ġ|| ĠnewValue Ġ> ĠmaxValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewValue Ġ= Ġcurrent MinValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ% Ġmax Step Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value To Draw Ġ= Ġcurrent MinValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcurrent MaxValue : ĠFloat Ġ= ĠDEFAULT _ MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ< Ġcurrent MinValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠnewValue Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ< Ġmin Value Ġ|| ĠnewValue Ġ> ĠmaxValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewValue Ġ= Ġcurrent MaxValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ% Ġmax Step Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue To Draw Ġ= Ġcurrent MaxValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġright Thumb Icon Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ thumb _ right )?. to Bitmap () ĊĠĠĠĠĠĠĠ Ġleft Thumb Icon Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ thumb _ left )?. to Bitmap () ĊĠĠĠĠĠĠĠ Ġparse Attr ( attrs ) ĊĠĠĠĠĠĠĠ Ġbar Base Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġbase Color ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbar Fill Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġfill Color ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmin Value Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġcircle Text Size . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcircle TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠmaxValue Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġcircle Text Size . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcircle TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthumb Icon Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmin Circle Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# FF CA 0 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmax Circle Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# FF CA 0 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġparse Attr ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Double Value Seek Bar View , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 min Value Step )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Step Ġ= Ġtyped Array . get Float ( R . style able . Double Value Seek Bar View _ r 2 min Value Step , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 max Value Step )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Step Ġ= Ġtyped Array . get Float ( R . style able . Double Value Seek Bar View _ r 2 max Value Step , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 min Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġtyped Array . get Float ( R . style able . Double Value Seek Bar View _ r 2 min Value , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 max Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġtyped Array . get Float ( R . style able . Double Value Seek Bar View _ r 2 max Value , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 bar Height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbar Height Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Double Value Seek Bar View _ r 2 bar Height , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 circle Radius )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Radius Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Double Value Seek Bar View _ r 2 circle Radius , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Padding Ġ= Ġcircle Radius ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 circle Text Size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Text Size Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Double Value Seek Bar View _ r 2 circle Text Size , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 circle TextColor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle TextColor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getColor ( R . style able . Double Value Seek Bar View _ r 2 circle TextColor , ĠDEFAULT _ TEXT _ COLOR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 circle Fill Color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Fill Color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . getColor ( R . style able . Double Value Seek Bar View _ r 2 circle Fill Color , ĠDEFAULT _ CIR CLE _ COLOR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 base Color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Color Ġ= Ġtyped Array . getColor ( R . style able . Double Value Seek Bar View _ r 2 base Color , ĠDEFAULT _ BASE _ COLOR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 fill Color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Color Ġ= Ġtyped Array . getColor ( R . style able . Double Value Seek Bar View _ r 2 fill Color , ĠDEFAULT _ FILL _ COLOR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 Current MaxValue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MaxValue Ġ= Ġtyped Array . get Float ( R . style able . Double Value Seek Bar View _ r 2 Current MaxValue , Ġ 1 0 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Double Value Seek Bar View _ r 2 Current MinValue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MinValue Ġ= Ġtyped Array . get Float ( R . style able . Double Value Seek Bar View _ r 2 Current MinValue , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Padding ( default Padding , Ġdefault Padding , Ġdefault Padding , Ġdefault Padding ) ĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Range Seek Bar View ChangeListener ( l : ĠOn Double Value Seek Bar ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm On Double Value Seek Bar View ChangeListener Ġ= Ġl ĊĠĠĠĠĠĠĠ Ġm On Double Value Seek Bar View ChangeListener ?. on ValueChanged ( this , Ġcurrent MinValue , Ġcurrent MaxValue , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Progress ( value : ĠFloat , ĠMIN : ĠFloat , ĠMAX : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 0 0 Ġ* Ġ( value Ġ- ĠMIN ) Ġ/ Ġ( MAX Ġ- ĠMIN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Height ( measure Spec : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġpadding Top Ġ+ Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġsize Ġ+= Ġbar Height . coerce At Least ( circle Radius ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresolve Size And State ( size , Ġmeasure Spec , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Width ( measure Spec : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġpadding Left Ġ+ Ġpadding Right ĊĠĠĠĠĠĠĠ Ġreturn Ġresolve Size And State ( size , Ġmeasure Spec , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( measure Width ( width Measure Spec ), Ġmeasure Height ( height Measure Spec )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Double Value Bar Horizontal ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Double Value Bar Horizontal ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbar Length Ġ= Ġ( width Ġ- Ġpadding Right ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġval Ġpercent Filled Min Ġ= Ġcalculate Progress ( min Value To Draw , Ġmin Value , ĠmaxValue ) Ġ/ ĠDEFAULT _ MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġval Ġfill Length Min Ġ= Ġbar Length Ġ* Ġpercent Filled Min ĊĊĠĠĠĠĠĠĠ Ġval Ġpercent Filled Max Ġ= Ġcalculate Progress ( max Value To Draw , Ġmin Value , ĠmaxValue ) Ġ/ ĠDEFAULT _ MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġval Ġfill Length Max Ġ= Ġbar Length Ġ* Ġpercent Filled Max ĊĊĠĠĠĠĠĠĠ Ġright Thumb Rect . set ( fill Length Max , Ġ 0 f , Ġfill Length Max Ġ+ Ġ 1 6 . dp , Ġbar Height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( right Thumb Rect , Ġ 3 . dp , Ġ 3 . dp , Ġmax Circle Paint ) ĊĊĠĠĠĠĠĠĠ Ġright Thumb Rect . set ( fill Length Max , Ġ 0 f , Ġfill Length Max Ġ+ Ġ 1 3 . dp , Ġbar Height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( right Thumb Rect , Ġmax Circle Paint ) ĊĊĠĠĠĠĠĠĠ Ġval Ġright Icon Top Ġ= Ġ( bar Height . toFloat () Ġ- Ġright Thumb Icon !!. height . toFloat ()) Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġval Ġright Icon Left Ġ= Ġfill Length Max Ġ+ Ġ( 1 6 . dp Ġ- Ġright Thumb Icon !!. width . toFloat ()) Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( right Thumb Icon !! , Ġright Icon Left , Ġright Icon Top , Ġthumb Icon Paint ) ĊĊĠĠĠĠĠĠĠ Ġleft Thumb Rect . set ( fill Length Min , Ġ 0 f , Ġfill Length Min Ġ+ Ġ 1 6 . dp , Ġbar Height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( left Thumb Rect , Ġ 3 . dp , Ġ 3 . dp , Ġmax Circle Paint ) ĊĊĠĠĠĠĠĠĠ Ġleft Thumb Rect . set ( fill Length Min Ġ+ Ġ 3 . dp , Ġ 0 f , Ġfill Length Min Ġ+ Ġ 1 6 . dp , Ġbar Height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( left Thumb Rect , Ġmax Circle Paint ) ĊĊĠĠĠĠĠĠĠ Ġval Ġicon Top Ġ= Ġ( bar Height . toFloat () Ġ- Ġleft Thumb Icon !!. height . toFloat ()) Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġval Ġicon Left Ġ= Ġfill Length Min Ġ+ Ġ( 1 6 . dp Ġ- Ġleft Thumb Icon !!. width . toFloat ()) Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( left Thumb Icon !! , Ġicon Left , Ġicon Top , Ġthumb Icon Paint ) ĊĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġ 1 6 . dp Ġ+ Ġfill Length Min ĊĠĠĠĠĠĠĠ Ġborder Rect . set ( left , Ġ 0 f , Ġfill Length Max , Ġ 3 . dp ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( border Rect , Ġmax Circle Paint ) ĊĠĠĠĠĠĠĠ Ġborder Rect . set ( left , Ġheight Ġ- Ġ 3 . dp , Ġfill Length Max , Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( border Rect , Ġmax Circle Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġup Date Position Max ( value : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalc Value Ġ= Ġ( value Ġ* Ġ( max Value Ġ- Ġmin Value ) Ġ/ Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Value Ġ= Ġ(( calc Value Ġ+ Ġmin Value ) Ġ/ Ġmax Step Ġ* Ġmax Step ) ĊĠĠĠĠĠĠĠ Ġif Ġ( display Value Ġ- Ġcurrent MinValue Ġ<= Ġmax Duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MaxValue Ġ= Ġdisplay Value ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MinValue Ġ+= Ġabs ( current MaxValue Ġ- Ġdisplay Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MaxValue Ġ+= Ġabs ( current MaxValue Ġ- Ġdisplay Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġup Date Position Min ( value : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalc Value Ġ= Ġ( value Ġ* Ġ( max Value Ġ- Ġmin Value ) Ġ/ Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Value Ġ= Ġ(( calc Value Ġ+ Ġmin Value ) Ġ/ Ġmin Step Ġ* Ġmin Step ) ĊĠĠĠĠĠĠĠ Ġif Ġ( current MaxValue Ġ- Ġdisplay Value Ġ<= Ġmax Duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MinValue Ġ= Ġdisplay Value ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MaxValue Ġ-= Ġabs ( current MinValue Ġ- Ġdisplay Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MinValue Ġ-= Ġabs ( current MinValue Ġ- Ġdisplay Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Click (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . perform Click () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnormalized To Screen ( normalized Coord : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Size : ĠFloat Ġ= Ġ(( width Ġ- Ġpadding Start Ġ- Ġpadding End )). toFloat () ĊĠĠĠĠĠĠĠ Ġreturn Ġ( normalized Coord Ġ/ ĠmaxValue Ġ* Ġwidth Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisIn Thumb Range ( touch X : ĠFloat , Ġnormalized Thumb Value : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġabs ( touch X Ġ- Ġnormalized To Screen ( normalized Thumb Value )) Ġ<= Ġget Thumb Width () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Thumb Width (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcircle Radius Ġ* Ġ 2 f ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġeval Pressed Thumb ( touch X : ĠFloat ): ĠThumb Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠThumb ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġmin Thumb Pressed Ġ= ĠisIn Thumb Range ( touch X , Ġnormalized To Screen ( current MinValue )) ĊĠĠĠĠĠĠĠ Ġval Ġmax Thumb Pressed Ġ= ĠisIn Thumb Range ( touch X , Ġnormalized To Screen ( current MaxValue )) ĊĠĠĠĠĠĠĠ Ġif Ġ( min Thumb Pressed Ġ&& Ġmax Thumb Pressed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġif Ġ( touch X Ġ/ Ġwidth Ġ> Ġ 0 . 5 f ) ĠThumb . MIN Ġelse ĠThumb . MAX ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( min Thumb Pressed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠThumb . MIN ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( max Thumb Pressed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠThumb . MAX ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( seek Bar Touch Enabled Ġ&& Ġresult Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfind Closest Thumb ( touch X ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult !! ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġfind Closest Thumb ( touch X : ĠFloat ): ĠThumb Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscreen Min X Ġ= Ġnormalized To Screen ( current MinValue ) ĊĠĠĠĠĠĠĠ Ġval Ġscreen Max X Ġ= Ġnormalized To Screen ( current MaxValue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( touch X Ġ>= Ġscreen Max X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠThumb . MAX ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( touch X Ġ<= Ġscreen Min X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠThumb . MIN ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmin Diff Ġ= Ġabs ( screen Min X Ġ- Ġtouch X . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġmax Diff Ġ= Ġabs ( screen Max X Ġ- Ġtouch X . toDouble ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( min Diff Ġ< Ġmax Diff ) ĠThumb . MIN Ġelse ĠThumb . MAX ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġattempt Claim Drag () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . request Dis allow Intercept Touch Event ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonStart Tracking Touch () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġon Stop Tracking Touch () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġtrack Touch Event ( event : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpointer Index Ġ= Ġevent . find Pointer Index ( m Active Pointer Id ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . getX ( pointer Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Thumb . MIN Ġ== Ġpressed Thumb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreen To Normalized ( x , ĠThumb . MIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Thumb . MAX Ġ== Ġpressed Thumb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreen To Normalized ( x , ĠThumb . MAX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġscreen To Normalized ( screen Coord : ĠFloat , Ġthumb : ĠThumb ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth . toFloat () ĊĠĠĠĠĠĠĠ Ġvar Ġcoordinate : ĠFloat Ġ= Ġscreen Coord ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Size Ġ= Ġ( width Ġ- Ġpadding Start Ġ- Ġpadding End ) ĊĠĠĠĠĠĠĠ Ġif Ġ( coordinate Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoordinate Ġ= Ġ 0 . 0 F ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( screen Coord Ġ> Ġcanvas Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoordinate Ġ= Ġcanvas Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ( coordinate Ġ/ Ġcanvas Size Ġ* Ġ 1 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( thumb Ġ== ĠThumb . MIN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġup Date Position Min ( value ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġup Date Position Max ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġenum Ġclass ĠThumb Ġ{ ĊĠĠĠĠĠĠĠ ĠMIN , ĠMAX ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isEnabled ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġevent . action ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( action Ġand ĠACTION _ MASK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Pointer Id Ġ= Ġevent . get Pointer Id ( event . pointer Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Index Ġ= Ġevent . find Pointer Index ( m Active Pointer Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Down Motion X Ġ= Ġevent . getX ( pointer Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Thumb Ġ= Ġeval Pressed Thumb ( m Down Motion X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pressed Thumb Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Tracking Touch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattempt Claim Drag () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pressed Thumb Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm On Double Value Seek Bar View ChangeListener ?. on ValueChanged ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Double Value Seek Bar View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MinValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MaxValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Stop Tracking Touch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm On Double Value Seek Bar View ChangeListener ?. on Stop Tracking Touch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Double Value Seek Bar View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MinValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MaxValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTouch Ġup Ġwhen Ġwe Ġnever Ġcros sed Ġthe Ġtouch Ġs lop Ġthreshold ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshould Ġbe Ġinterpreted Ġas Ġa Ġtap - seek Ġto Ġthat Ġlocation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Tracking Touch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Stop Tracking Touch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Thumb Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm On Double Value Seek Bar View ChangeListener ?. on ValueChanged ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Double Value Seek Bar View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MinValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MaxValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ POINTER _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ POINTER _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Stop Tracking Touch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuper State Ġ= Ġsuper . on Save InstanceState () ĊĠĠĠĠĠĠĠ Ġval Ġss Ġ= ĠSaved State ( super State !! ) ĊĠĠĠĠĠĠĠ Ġss . min Value Ġ= Ġcurrent MinValue ĊĠĠĠĠĠĠĠ Ġss . max Value Ġ= Ġcurrent MaxValue ĊĠĠĠĠĠĠĠ Ġreturn Ġss ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġss Ġ= Ġstate Ġas ĠSaved State ĊĠĠĠĠĠĠĠ Ġcurrent MinValue Ġ= Ġss . min Value ĊĠĠĠĠĠĠĠ Ġcurrent MaxValue Ġ= Ġss . max Value ĊĊĠĠĠĠĠĠĠ Ġmin Value To Draw Ġ= Ġcurrent MinValue ĊĠĠĠĠĠĠĠ ĠmaxValue To Draw Ġ= Ġcurrent MaxValue ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( ss . super State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSaved State Ġ: ĠBase Saved State Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmin Value : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar ĠmaxValue : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġconstructor ( super State : ĠParcel able ) Ġ: Ġsuper ( super State ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconstructor (` in `: ĠParcel ) Ġ: Ġsuper (` in `) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġ` in `. read Float () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġ` in `. read Float () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( out : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . writeTo Parcel ( out , Ġflags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Float ( min Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Float ( max Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠCRE ATOR : ĠParcel able . Creator < Saved State > Ġ= Ġobject Ġ: ĠParcel able . Creator < Saved State > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel (` in `: ĠParcel ): ĠSaved State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSaved State (` in `) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Saved State ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ