package Ġio . github . stack 0 7 1 4 2 . discrete seek bar Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 4 . view . accessibility . Accessibility NodeInfo Compat Ċ import Ġandroid . support . v 4 . widget . Explore By Touch Helper Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġkotlin . math . round Ċ Ċ class ĠDis crete Seek Bar Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġ// Ġvalue ĊĠĠĠ Ġprivate Ġvar Ġmin Value : ĠInt ĊĠĠĠ Ġprivate Ġvar ĠmaxValue : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġunit Value : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġsection Count : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġvalue : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġvalue Index : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( value Ġ- Ġmin Value ) Ġ/ Ġunit Value ĊĊĠĠĠ Ġ// Ġtrack ĊĠĠĠ Ġprivate Ġvar Ġtrack Width : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġtrack Color : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġtrack Length : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġtrack Section Length : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠ Ġ// Ġtick Mark ĊĠĠĠ Ġprivate Ġvar Ġtick Mark Text Top Margin : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġtick Mark Text Size : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġtick Mark TextColor : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġtick Mark Drawable : ĠDrawable ? ĊĠĠĠ Ġprivate Ġvar Ġtick Mark Text Array Ġ= ĠSparse Array < String >() ĊĊĠĠĠ Ġ// Ġthumb ĊĠĠĠ Ġprivate Ġvar Ġthumb Default Radius : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġthumb Pressed Radius : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġthumb Color : ĠInt ĊĊĠĠĠ Ġ// Ġcoordinate ĊĠĠĠ Ġprivate Ġvar Ġthumb Center X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġthumb Pre Center X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġtrack Start X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġtrack End X : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠ Ġ// Ġtouch Ġevent ĊĠĠĠ Ġprivate Ġvar Ġtrack Touch Enable : ĠBoolean ĊĠĠĠ Ġprivate Ġvar Ġon ValueChanged Listener : ĠOn ValueChanged Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Thumb Dragging : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġtouch Area Factor : ĠFloat Ġ= Ġ 1 . 7 f ĊĠĠĠ Ġprivate Ġvar Ġanim Duration : ĠLong Ġ= Ġ 3 0 0 L ĊĊĠĠĠ Ġ// ĠPaint ĊĠĠĠ Ġprivate Ġval Ġpaint : ĠPaint ĊĠĠĠ Ġprivate Ġval Ġtick Mark Text Rect : ĠRect ĊĊĠĠĠ Ġ// ĠBuilder ĊĠĠĠ Ġprivate Ġvar Ġconfig Builder : ĠConfig Builder ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠAccessibility ĊĠĠĠ Ġprivate Ġvar Ġcontent Description Array Ġ= ĠSparse Array < String >() ĊĠĠĠ Ġprivate Ġvar Ġdiscrete Seek Bar Touch Helper : ĠDis crete Seek Bar Touch Helper ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠConstructor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdiscrete Seek Bar Touch Helper Ġ= ĠDis crete Seek Bar Touch Helper ( this ) ĊĠĠĠĠĠĠĠ ĠView Compat . set Accessibility Delegate ( this , Ġdiscrete Seek Bar Touch Helper ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Discrete Seek Bar , Ġdef Style Attr , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġvalue ĊĠĠĠĠĠĠĠ Ġthis . max Value Ġ= Ġtyped Array . getInteger ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ max Value , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġthis . min Value Ġ= Ġtyped Array . getInteger ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ min Value , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġthis . section Count Ġ= Ġtyped Array . getInteger ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ section Count , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġthis . unit Value Ġ= Ġ( max Value Ġ- Ġmin Value ) Ġ/ Ġsection Count ĊĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġtyped Array . getInteger ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ value , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġthis . value Index Ġ= Ġ( value Ġ- Ġmin Value ) Ġ/ Ġunit Value ĊĊĠĠĠĠĠĠĠ Ġ// Ġtrack ĊĠĠĠĠĠĠĠ Ġthis . track Width Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ track Width , Ġdp 2 px ( 1 )) ĊĠĠĠĠĠĠĠ Ġthis . track Color Ġ= Ġtyped Array . getColor ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ track Color , ĠContext Compat . getColor ( context , ĠR . color . discrete _ seek bar _ color Gray )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġtick Mark ĊĠĠĠĠĠĠĠ Ġthis . tick Mark Text Top Margin Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ tick Mark Top Margin , Ġdp 2 px ( 1 9 )) ĊĠĠĠĠĠĠĠ Ġthis . tick Mark Text Size Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ tick Mark Text Size , Ġsp 2 px ( 1 2 )) ĊĠĠĠĠĠĠĠ Ġthis . tick Mark TextColor Ġ= Ġtyped Array . getColor ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ tick Mark TextColor , ĠContext Compat . getColor ( context , ĠR . color . discrete _ seek bar _ color Black )) ĊĠĠĠĠĠĠĠ Ġthis . tick Mark Drawable Ġ= Ġtyped Array . get Drawable ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ tick Mark Drawable ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthumb ĊĠĠĠĠĠĠĠ Ġthis . thumb Default Radius Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ thumb Default Size , Ġdp 2 px ( 1 6 )) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġthis . thumb Pressed Radius Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ thumb Pressed Size , Ġdp 2 px ( 2 4 )) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġthis . thumb Color Ġ= Ġtyped Array . getColor ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ thumb Color , ĠContext Compat . getColor ( context , ĠR . color . discrete _ seek bar _ color Red 1 0 0 )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġtouch Ġevent ĊĠĠĠĠĠĠĠ Ġthis . track Touch Enable Ġ= Ġtyped Array . getBoolean ( R . style able . Discrete Seek Bar _ discrete _ seek bar _ track Touch Enable , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĊĠĠĠĠĠĠĠ Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġpaint . stroke Cap Ġ= ĠPaint . Cap . ROUND ĊĊĠĠĠĠĠĠĠ Ġtick Mark Text Rect Ġ= ĠRect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠMeasure Ġ& ĠDraw ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġtrack Start X Ġ= Ġround (( padding Left Ġ+ Ġthumb Pressed Radius ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġtrack End X Ġ= Ġround (( meas ured Width Ġ- Ġpadding Right Ġ- Ġthumb Pressed Radius ). toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġtrack Section Length Ġ= Ġround (( track End X Ġ- Ġtrack Start X ) Ġ/ Ġsection Count ) ĊĠĠĠĠĠĠĠ Ġtrack End X Ġ= Ġtrack Start X Ġ+ Ġsection Count Ġ* Ġtrack Section Length ĊĊĠĠĠĠĠĠĠ Ġtrack Length Ġ= Ġtrack End X Ġ- Ġtrack Start X ĊĊĠĠĠĠĠĠĠ Ġval Ġheight Mode Ġ= ĠView . Measure Spec . get Mode ( height Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeasured Width Ġ= ĠView . Measure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġmeasured Height Ġ= ĠView . Measure Spec . getSize ( height Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Height Ġ= Ġthumb Pressed Radius Ġ+ Ġtick Mark Text Top Margin Ġ+ Ġsp 2 px ( tick Mark Text Size ) Ġ* Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( meas ured Width , Ġif Ġ( height Mode Ġ== ĠView . Measure Spec . EX ACT LY ) Ġmeasured Height Ġelse Ġlayout Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠDraw Ġtrack ĊĠĠĠĠĠĠĠ Ġcanvas . translate ( track Start X , Ġ( meas ured Height Ġ/ Ġ 2 ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġvar Ġinit Count Ġ= Ġcanvas . save () ĊĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġtrack Color ĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġtrack Width . toFloat () ĊĠĠĠĠĠĠĠ Ġcanvas . draw Line ( 0 f , Ġ 0 f , Ġtrack Length , Ġ 0 f , Ġpaint ) ĊĊĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( init Count ) ĊĊĠĠĠĠĠĠĠ Ġinit Count Ġ= Ġcanvas . save () ĊĊĠĠĠĠĠĠĠ Ġpaint . textAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġtick Mark TextColor ĊĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġtick Mark Text Size . toFloat () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . ĠDraw Ġtick Marks ĊĠĠĠĠĠĠĠ Ġval Ġtick Mark Width Ġ= Ġtick Mark Drawable ?. intrinsic Width ĊĠĠĠĠĠĠĠ Ġval Ġtick Mark Height Ġ= Ġtick Mark Drawable ?. intrinsic Height ĊĠĠĠĠĠĠĠ Ġval Ġtick Mark Half Width Ġ= Ġtick Mark Width ?. div ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġtick Mark Half Height Ġ= Ġtick Mark Height ?. div ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġtick Mark Drawable ?. setBounds ( tick Mark Half Width ?. unary Minus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 , Ġtick Mark Half Height ?. unary Minus () Ġ?: Ġ 0 , Ġtick Mark Half Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 , Ġtick Mark Half Height Ġ?: Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . ĠDraw Ġtick Mark Text ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġmin Value ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ<= ĠmaxValue ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Mark Drawable ?. draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tick Mark Text Array . get ( i , Ġnull ) Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate ( 0 f , Ġtick Mark Text Top Margin . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . getText Bounds ( tick Mark Text Array . get ( i ), Ġ 0 , Ġtick Mark Text Array . get ( i ). length , Ġtick Mark Text Rect ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtext X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġmin Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext X Ġ= Ġtick Mark Text Rect . width () Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( i Ġ== ĠmaxValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext X Ġ= Ġ-( tick Mark Text Rect . width () Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( tick Mark Text Array . get ( i ), Ġtext X . toFloat (), Ġtick Mark Text Rect . height (). toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate ( track Section Length , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġunit Value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( init Count ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . ĠDraw Ġthumb ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Thumb Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Center X Ġ= Ġtrack Start X Ġ+ Ġtrack Section Length Ġ* Ġvalue Index ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġthumb Color ĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( thumb Center X Ġ- Ġtrack Start X , Ġ 0 f , Ġ( if Ġ( is Thumb Dragging ) Ġthumb Pressed Radius Ġelse Ġthumb Default Radius ). toFloat (), Ġpaint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Click (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . perform Click () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . request Dis allow Intercept Touch Event ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Thumb Dragging Ġ= Ġdetect Thumb Is Tou ched ( event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Thumb Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( track Touch Enable Ġ&& Ġdetect Track Is Tou ched ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Thumb Dragging Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġget Thumb Center X ( event . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ!= Ġthumb Pre Center X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Pre Center X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Center X Ġ= Ġthumb Pre Center X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Value With Thumb Center X () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ValueChanged ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Thumb Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġget Thumb Center X ( event . x ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ!= Ġthumb Pre Center X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Pre Center X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumb Center X Ġ= Ġthumb Pre Center X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Value With Thumb Center X () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ValueChanged ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . request Dis allow Intercept Touch Event ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Thumb Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( anim Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Thumb Dragging Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Thumb Dragging Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġis Thumb Dragging Ġ|| Ġsuper . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠDetect Ġ& ĠCalculate ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġdetect Thumb Is Tou ched ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġthumb X Ġ= Ġtrack Start X Ġ+ Ġtrack Section Length Ġ* Ġvalue Index ĊĠĠĠĠĠĠĠ Ġval Ġthumb Y Ġ= Ġ( meas ured Height Ġ/ Ġ 2 ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff X Ġ= Ġevent . x Ġ- Ġthumb X ĊĠĠĠĠĠĠĠ Ġval Ġdiff Y Ġ= Ġevent . y Ġ- Ġthumb Y ĊĊĠĠĠĠĠĠĠ Ġval Ġthumb Touch Radius Ġ= Ġthumb Pressed Radius Ġ* Ġtouch Area Factor ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsquare Of ( diff X ) Ġ+ Ġsquare Of ( diff Y ) Ġ<= Ġsquare Of ( thumb Touch Radius ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdetect Track Is Tou ched ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtouch Area Start X Ġ= Ġtrack Start X Ġ- Ġthumb Pressed Radius ĊĠĠĠĠĠĠĠ Ġval Ġtouch Area End X Ġ= Ġtrack End X Ġ+ Ġthumb Pressed Radius ĊĊĠĠĠĠĠĠĠ Ġval Ġtouch Area Start Y Ġ= Ġpadding Top . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġtouch Area End Y Ġ= Ġ( meas ured Height Ġ- Ġpadding Bottom ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ(( event . x Ġin Ġtouch Area Start X .. touch Area End X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( event . y Ġin Ġtouch Area Start Y .. touch Area End Y )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Thumb Center X ( touched X : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( touched X Ġ<= Ġtrack Start X ) Ġreturn Ġtrack Start X ĊĠĠĠĠĠĠĠ Ġif Ġ( touched X Ġ>= Ġtrack End X ) Ġreturn Ġtrack End X ĊĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ<= Ġsection Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġtrack Start X Ġ+ Ġi Ġ* Ġtrack Section Length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ<= Ġtouched X Ġ&& Ġtouched X Ġ- Ġx Ġ<= Ġtrack Section Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( touched X Ġ- Ġx Ġ<= Ġtrack Section Length Ġ/ Ġ 2 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+ Ġtrack Section Length ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Value With Thumb Center X () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġmin Value Ġ+ Ġ(( thumb Center X Ġ- Ġtrack Start X ) Ġ/ Ġtrack Section Length ). toInt () Ġ* Ġunit Value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠEvents ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġinterface ĠOn ValueChanged Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon ValueChanged ( value : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify ValueChanged ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on ValueChanged Listener ?. on ValueChanged ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠUtils ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġdp 2 px ( dp : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġdp . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources . getSystem (). display Metrics ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsp 2 px ( sp : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ SP , Ġsp . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources . getSystem (). display Metrics ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsquare Of ( f : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġf Ġ* Ġf ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠBuilder ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun ĠsetValue ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetConfig Builder (): ĠConfig Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( config Builder Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Builder Ġ= ĠConfig Builder ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfig Builder ?. min Value Ġ= Ġthis . min Value ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. max Value Ġ= Ġthis . max Value ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. section Count Ġ= Ġthis . section Count ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. value Ġ= Ġthis . value ĊĊĠĠĠĠĠĠĠ Ġconfig Builder ?. track Width Ġ= Ġthis . track Width ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. track Color Ġ= Ġthis . track Color ĊĊĠĠĠĠĠĠĠ Ġconfig Builder ?. tick Mark Text Top Margin Ġ= Ġthis . tick Mark Text Top Margin ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. tick Mark Text Size Ġ= Ġthis . tick Mark Text Size ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. tick Mark TextColor Ġ= Ġthis . tick Mark TextColor ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. tick Mark Drawable Ġ= Ġthis . tick Mark Drawable ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. tick Mark Text Array Ġ= Ġthis . tick Mark Text Array ĊĊĠĠĠĠĠĠĠ Ġconfig Builder ?. thumb Default Radius Ġ= Ġthis . thumb Default Radius ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. thumb Pressed Radius Ġ= Ġthis . thumb Pressed Radius ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. thumb Color Ġ= Ġthis . thumb Color ĊĊĠĠĠĠĠĠĠ Ġconfig Builder ?. track Touch Enable Ġ= Ġthis . track Touch Enable ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. on ValueChanged Listener Ġ= Ġthis . on ValueChanged Listener ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. touch Area Factor Ġ= Ġthis . touch Area Factor ĊĠĠĠĠĠĠĠ Ġconfig Builder ?. anim Duration Ġ= Ġthis . anim Duration ĊĊĠĠĠĠĠĠĠ Ġconfig Builder ?. content Description Array Ġ= Ġthis . content Description Array ĊĊĠĠĠĠĠĠĠ Ġreturn Ġconfig Builder Ġ?: ĠConfig Builder ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfig ( config Builder : ĠConfig Builder ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . min Value Ġ= Ġconfig Builder . min Value ĊĠĠĠĠĠĠĠ Ġthis . max Value Ġ= Ġconfig Builder . max Value ĊĠĠĠĠĠĠĠ Ġthis . section Count Ġ= Ġconfig Builder . section Count ĊĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġconfig Builder . value ĊĠĠĠĠĠĠĠ Ġthis . unit Value Ġ= Ġ( max Value Ġ- Ġmin Value ) Ġ/ Ġsection Count ĊĠĠĠĠĠĠĠ Ġthis . value Index Ġ= Ġ( value Ġ- Ġmin Value ) Ġ/ Ġunit Value ĊĊĠĠĠĠĠĠĠ Ġthis . track Width Ġ= Ġconfig Builder . track Width ĊĠĠĠĠĠĠĠ Ġthis . track Color Ġ= Ġconfig Builder . track Color ĊĊĠĠĠĠĠĠĠ Ġthis . tick Mark Text Top Margin Ġ= Ġconfig Builder . tick Mark Text Top Margin ĊĠĠĠĠĠĠĠ Ġthis . tick Mark Text Size Ġ= Ġconfig Builder . tick Mark Text Size ĊĠĠĠĠĠĠĠ Ġthis . tick Mark TextColor Ġ= Ġconfig Builder . tick Mark TextColor ĊĠĠĠĠĠĠĠ Ġthis . tick Mark Drawable Ġ= Ġconfig Builder . tick Mark Drawable ĊĠĠĠĠĠĠĠ Ġthis . tick Mark Text Array Ġ= Ġconfig Builder . tick Mark Text Array ĊĊĠĠĠĠĠĠĠ Ġthis . thumb Default Radius Ġ= Ġconfig Builder . thumb Default Radius ĊĠĠĠĠĠĠĠ Ġthis . thumb Pressed Radius Ġ= Ġconfig Builder . thumb Pressed Radius ĊĠĠĠĠĠĠĠ Ġthis . thumb Color Ġ= Ġconfig Builder . thumb Color ĊĊĠĠĠĠĠĠĠ Ġthis . track Touch Enable Ġ= Ġconfig Builder . track Touch Enable ĊĠĠĠĠĠĠĠ Ġthis . on ValueChanged Listener Ġ= Ġconfig Builder . on ValueChanged Listener ĊĠĠĠĠĠĠĠ Ġthis . touch Area Factor Ġ= Ġconfig Builder . touch Area Factor ĊĠĠĠĠĠĠĠ Ġthis . anim Duration Ġ= Ġconfig Builder . anim Duration ĊĊĠĠĠĠĠĠĠ Ġthis . content Description Array Ġ= Ġconfig Builder . content Description Array ĊĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠDis crete Seek Bar Touch Helper ( host : ĠView ) Ġ: ĠExplo re By Touch Helper ( host ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Virtual View At ( x : ĠFloat , Ġy : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġget Virtual View Id At ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( id Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExplo re By Touch Helper . INVALID _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Visible Virtual Views ( virtual View Ids : ĠMutable List < Int > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. section Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual View Ids ?. add ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Populate Event For Virtual View ( virtual View Id : ĠInt , Ġevent : ĠAccessibility Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . content Description Ġ= getDescription By Virtual View Id ( virtual View Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Populate Node For Virtual View ( virtual View Id : ĠInt , Ġnode : ĠAccessibility NodeInfo Compat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . content Description Ġ= ĠgetDescription By Virtual View Id ( virtual View Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . addAction ( Accessibility NodeInfo Compat . ACTION _ CLICK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . setBounds In Parent ( get Bounds By Virtual View Id ( virtual View Id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Perform Action For Virtual View ( virtual View Id : ĠInt , Ġaction : ĠInt , Ġarguments : ĠBundle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Hover Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdiscrete Seek Bar Touch Helper . dispatch Hover Event ( event !! ) Ġ|| Ġsuper . dispatch Hover Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Virtual View Id At ( x : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpoint X Ġ= Ġtrack Start X ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġtrack Section Length Ġ/ Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġvar Ġidx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. section Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ> Ġpoint X Ġ- Ġlength Ġ&& Ġx Ġ<= Ġpoint X Ġ+ Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint X Ġ+= Ġtrack Section Length ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġidx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetDescription By Virtual View Id ( id : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Array . size () Ġ<= Ġ 0 Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ== Ġcontent Description Array . indexOf Key ( value ) Ġ-> Ġcontent Description Array . get ( content Description Array . key At ( id )) Ġ+ Ġ", Ġselected " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcontent Description Array . get ( content Description Array . key At ( id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bounds By Virtual View Id ( id : ĠInt ): ĠRect Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpoint X Ġ= Ġtrack Start X Ġ+ Ġid Ġ* Ġtrack Section Length ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġtrack Section Length Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġmeasured Height Ġ/ Ġ 2 Ġ- Ġthumb Pressed Radius ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġmeasured Height Ġ/ Ġ 2 Ġ+ Ġthumb Pressed Radius ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġrect . set (( point X Ġ- Ġlength ). toInt (), Ġtop , Ġ( point X Ġ+ Ġlength ). toInt (), Ġbottom ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrect ĊĠĠĠ Ġ} Ċ }