package Ġcom . stem labs . ell u . widgets Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View ĊĊ Ċ class ĠCur ved Bottom Navigation View Ġ: ĠBottom Navigation View Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Path : ĠPath ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Paint : ĠPaint ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġthe ĠCUR VE _ CIR CLE _ RADIUS Ġrepresent Ġthe Ġradius Ġof Ġthe Ġfab Ġbutton Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠCUR VE _ CIR CLE _ RADIUS Ġ= Ġ 2 5 6 Ġ/ Ġ 2 ĊĊĠĠĠ Ġ// Ġthe Ġcoordinates Ġof Ġthe Ġfirst Ġcurve ĊĠĠĠ Ġprivate Ġval Ġm First Curve Start Point : ĠPoint Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġval Ġm First Curve EndPoint : ĠPoint Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġval Ġm First Curve ControlPoint 1 : ĠPoint Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġval Ġm First Curve ControlPoint 2 : ĠPoint Ġ= ĠPoint () ĊĊĠĠĠ Ġ// the Ġcoordinates Ġof Ġthe Ġsecond Ġcurve ĊĠĠĠ Ġprivate Ġvar Ġm Second Curve Start Point : ĠPoint Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġval Ġm Second Curve EndPoint : ĠPoint Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġval Ġm Second Curve ControlPoint 1 : ĠPoint Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġval Ġm Second Curve ControlPoint 2 : ĠPoint Ġ= ĠPoint () ĊĠĠĠ Ġprivate Ġvar Ġm NavigationBar Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm NavigationBar Height Ġ= Ġ 0 ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context !! ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context !! , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !! , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġm Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġm Paint !!. setStyle ( Paint . Style . FILL _ AND _ ST RO KE ) ĊĠĠĠĠĠĠĠ Ġm Paint !!. setColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġwidth Ġand Ġheight Ġof Ġnavigation Ġbar ĊĠĠĠĠĠĠĠ Ġ// ĠNavigation Ġbar Ġbounds Ġ( width Ġ& Ġheight ) ĊĠĠĠĠĠĠĠ Ġm NavigationBar Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġm NavigationBar Height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġcoordinates Ġ( x , y ) Ġof Ġthe Ġstart Ġpoint Ġbefore Ġcurve ĊĠĠĠĠĠĠĠ Ġm First Curve Start Point . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm NavigationBar Width Ġ/ Ġ 2 Ġ- ĠCUR VE _ CIR CLE _ RADIUS Ġ* Ġ 2 Ġ- ĠCUR VE _ CIR CLE _ RADIUS Ġ/ Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġcoordinates Ġ( x , y ) Ġof Ġthe Ġend Ġpoint Ġafter Ġcurve ĊĠĠĠĠĠĠĠ Ġm First Curve EndPoint . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm NavigationBar Width Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCUR VE _ CIR CLE _ RADIUS Ġ+ ĠCUR VE _ CIR CLE _ RADIUS Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġsame Ġthing Ġfor Ġthe Ġsecond Ġcurve ĊĠĠĠĠĠĠĠ Ġm Second Curve Start Point Ġ= Ġm First Curve EndPoint ĊĠĠĠĠĠĠĠ Ġm Second Curve EndPoint . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm NavigationBar Width Ġ/ Ġ 2 Ġ+ ĠCUR VE _ CIR CLE _ RADIUS Ġ* Ġ 2 Ġ+ ĠCUR VE _ CIR CLE _ RADIUS Ġ/ Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġcoordinates Ġ( x , y ) Ġ Ġof Ġthe Ġ 1 st Ġcontrol Ġpoint Ġon Ġa Ġcubic Ġcurve ĊĠĠĠĠĠĠĠ Ġm First Curve ControlPoint 1 . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Curve Start Point . x Ġ+ ĠCUR VE _ CIR CLE _ RADIUS Ġ+ ĠCUR VE _ CIR CLE _ RADIUS Ġ/ Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Curve Start Point . y ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġcoordinates Ġ( x , y ) Ġ Ġof Ġthe Ġ 2 nd Ġcontrol Ġpoint Ġon Ġa Ġcubic Ġcurve ĊĠĠĠĠĠĠĠ Ġm First Curve ControlPoint 2 . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Curve EndPoint . x Ġ- ĠCUR VE _ CIR CLE _ RADIUS Ġ* Ġ 2 Ġ+ ĠCUR VE _ CIR CLE _ RADIUS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Curve EndPoint . y ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm Second Curve ControlPoint 1 . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Curve Start Point . x Ġ+ ĠCUR VE _ CIR CLE _ RADIUS Ġ* Ġ 2 Ġ- ĠCUR VE _ CIR CLE _ RADIUS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Curve Start Point . y ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm Second Curve ControlPoint 2 . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Curve EndPoint . x Ġ- Ġ( CUR VE _ CIR CLE _ RADIUS Ġ+ ĠCUR VE _ CIR CLE _ RADIUS Ġ/ Ġ 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Curve EndPoint . y ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm Path !!. reset () ĊĠĠĠĠĠĠĠ Ġm Path !!. moveTo ( 0 F , Ġ 0 F ) ĊĠĠĠĠĠĠĠ Ġm Path !!. lineTo ( m First Curve Start Point . x . toFloat (), Ġm First Curve Start Point . y . toFloat ()) ĊĠĠĠĠĠĠĠ Ġm Path !!. cubic To ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Curve ControlPoint 1 . x . toFloat (), Ġm First Curve ControlPoint 1 . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Curve ControlPoint 2 . x . toFloat (), Ġm First Curve ControlPoint 2 . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Curve EndPoint . x . toFloat (), Ġm First Curve EndPoint . y . toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm Path !!. cubic To ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Curve ControlPoint 1 . x . toFloat (), Ġm Second Curve ControlPoint 1 . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Curve ControlPoint 2 . x . toFloat (), Ġm Second Curve ControlPoint 2 . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Curve EndPoint . x . toFloat (), Ġm Second Curve EndPoint . y . toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm Path !!. lineTo ( m NavigationBar Width . toFloat (), Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠ Ġm Path !!. lineTo ( m NavigationBar Width . toFloat (), Ġm NavigationBar Height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġm Path !!. lineTo ( 0 F , Ġm NavigationBar Height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġm Path !!. close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġm Paint ?. let Ġ{ Ġm Path ?. let Ġ{ Ġit 1 Ġ-> Ġcanvas . draw Path ( it 1 , Ġit ) Ġ} Ġ} ĊĠĠĠ Ġ} Ċ }