package Ġcom . be lo tron . we ath err ad ar hr Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroidx . appcompat . widget . AppCompat Seek Bar ĊĊ Ċ class ĠThumb Seek Bar ( context Ġ: ĠContext , Ġattrs : ĠAttributeSet ) Ġ: ĠAppCompat Seek Bar ( context , Ġattrs ) Ġ{ ĊĠĠĠ Ġvar Ġthumb Text : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġthumb Progress : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ// Ġanchor Ġposition Ġof Ġthe Ġseek bar Ġwithin Ġits Ġparent , Ġneeded Ġto Ġrestore Ġthe ĊĠĠĠ Ġ// Ġposition Ġafter Ġenter / exit Ġanimation ĊĠĠĠ Ġprivate Ġvar Ġanchor Y Ġ= Ġ 0 f ĊĊĠĠĠ Ġprivate Ġval Ġthumb Height Ġ= Ġresources . get Dimension ( R . dim en . seek bar _ thumb _ height ) ĊĠĠĠ Ġprivate Ġval Ġbox Border Ġ= Ġresources . get Dimension ( R . dim en . seek bar _ thumb _ box _ border ) ĊĠĠĠ Ġprivate Ġval Ġtriangle Half Width Ġ= Ġresources . get Dimension ( R . dim en . seek bar _ thumb _ triangle _ half _ width ) ĊĠĠĠ Ġprivate Ġval Ġtext Offset Ġ= Ġresources . get Dimension ( R . dim en . seek bar _ thumb _ text _ offset ) ĊĠĠĠ Ġprivate Ġval Ġrect Corner Radius Ġ= Ġresources . get Dimension ( R . dim en . seek bar _ thumb _ box _ corner _ radius ) ĊĠĠĠ Ġprivate Ġval Ġtext Bounds Ġ= ĠRect () ĊĠĠĠ Ġprivate Ġval Ġtext Rect Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġval Ġtriangle Path Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġval Ġtext Paint Ġ= ĠText Paint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġresources . getColor ( R . color . seek bar _ thumb _ text ) ĊĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġresources . get Dimension ( R . dim en . seek bar _ thumb _ text _ size ) ĊĠĠĠĠĠĠĠ Ġtype face Ġ= ĠType face . DEFAULT _ BOLD ĊĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . LEFT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtext Background Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġresources . getColor ( R . color . seek bar _ background ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġif Ġ( thumb Text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Paint . getText Bounds ( thumb Text , Ġ 0 , Ġthumb Text . length , Ġtext Bounds ) ĊĠĠĠĠĠĠĠ Ġval Ġprogress Ratio Ġ= Ġthumb Progress . toFloat () Ġ/ Ġmax ĊĠĠĠĠĠĠĠ Ġval Ġnet Width Ġ= Ġwidth Ġ- Ġ( padding Left Ġ+ Ġpadding Right ) ĊĠĠĠĠĠĠĠ Ġval Ġthumb Center Ġ= Ġpadding Left Ġ+ Ġprogress Ratio Ġ* Ġnet Width ĊĠĠĠĠĠĠĠ Ġval Ġtext X Ġ= Ġthumb Center Ġ- Ġtext Bounds . width () Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġtriangle Path . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( thumb Center Ġ- Ġtriangle Half Width , Ġ- thumb Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( thumb Center , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( thumb Center Ġ+ Ġtriangle Half Width , Ġ- thumb Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Rect . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext X Ġ- Ġbox Border , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- thumb Height Ġ- Ġtext Bounds . height () Ġ- Ġ 2 Ġ* Ġbox Border , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext X Ġ+ Ġtext Bounds . width () Ġ+ Ġbox Border , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- thumb Height ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( text Rect , Ġrect Corner Radius , Ġrect Corner Radius , Ġtext Background Paint ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( triangle Path , Ġtext Background Paint ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Text ( thumb Text , Ġtext X Ġ- Ġtext Offset , Ġ- thumb Height Ġ- Ġbox Border , Ġtext Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanchor Y Ġ= Ġtop . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Animate Enter () Ġ{ ĊĠĠĠĠĠĠĠ Ġthumb Text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġparent Height ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠ Ġanimate (). y ( anchor Y ). duration Ġ= Ġ 2 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Animate Exit () Ġ{ ĊĠĠĠĠĠĠĠ Ġanimate (). y ( parent Height ). with End Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġparent Height Ġget () Ġ= Ġ( parent Ġas ĠView ). height . toFloat () Ċ } Ċ