package Ġcom . w aj ah at kar im 3 . d roid con . eme a 2 0 2 0 Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . compose . animation . core . animate Float As State Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . shape . Circle Shape Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled .* Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . alpha Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . graphics Layer Ċ import Ġandroidx . compose . ui . graphics . vector . Image Vector Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġjava . util .* Ċ Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠCircle Menu () Ġ{ ĊĠĠĠ Ġval Ġmenu Open Ġ= Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ Ġvar Ġdistance Ġ= Ġ 1 5 0 f ĊĠĠĠ Ġvar Ġstart Degrees Ġ= Ġ- 9 0 . 0 ĊĊĠĠĠ Ġvar Ġmenu Options Ġ= ĠArrayList < Menu Option Model >() ĊĠĠĠ Ġmenu Options . add ( Menu Option Model ( icon Ġ= ĠIcons . Default . Home , ĠbackgroundColor Ġ= ĠColor ( 0 xFF 3 5 ACE 9 ))) ĊĠĠĠ Ġmenu Options . add ( Menu Option Model ( icon Ġ= ĠIcons . Default . Search , ĠbackgroundColor Ġ= ĠColor ( 0 xFF 6 4 8 C 0 0 ))) ĊĠĠĠ Ġmenu Options . add ( Menu Option Model ( icon Ġ= ĠIcons . Default . Notifications , ĠbackgroundColor Ġ= ĠColor ( 0 xFFFF 5 2 4 2 ))) ĊĠĠĠ Ġmenu Options . add ( Menu Option Model ( icon Ġ= ĠIcons . Default . Settings , ĠbackgroundColor Ġ= ĠColor ( 0 xFF AD 7 1 D 2 ))) ĊĠĠĠ Ġmenu Options . add ( Menu Option Model ( icon Ġ= ĠIcons . Default . Location On , ĠbackgroundColor Ġ= ĠColor ( 0 xFFFF BD 2 E ))) ĊĊĠĠĠ Ġvar Ġdegree Diff Ġ= Ġ 3 6 0 Ġ/ Ġmenu Options . size ĊĊĠĠĠ ĠBox ( modifier Ġ= ĠModifier . fill Max Width (). height ( 5 0 0 . dp ), ĊĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSur rounding ĠMenu ĠOptions ĊĠĠĠĠĠĠĠ Ġvar Ġdegrees Ġ= Ġstart Degrees ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmenu Options . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmenu Ġ= Ġmenu Options [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMenu Icon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġmenu . icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġmenu . backgroundColor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdegrees Ġ= Ġdegrees , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ= Ġdistance , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Menu Open Ġ= Ġmenu Open . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Open . value Ġ= Ġ! menu Open . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Circle ", Ġ" Button ĠOut ĠClick ed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdegrees Ġ+= Ġdegree Diff ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMenu ĠCenter ĠIcon ĊĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= Ġif Ġ( menu Open . value ) ĠIcons . Default . Close Ġelse ĠIcons . Default . Menu , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . click able ( onClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Open . value Ġ= Ġ! menu Open . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Circle ", Ġ" Center ĠClick ed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġif Ġ( menu Open . value ) ĠColor . Gray Ġelse ĠColor . White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= ĠCircle Shape ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠColor . Black ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠMenu Icon ( icon : ĠImage Vector , ĠbackgroundColor : ĠColor , Ġdegrees : ĠDouble , Ġdistance : ĠFloat , Ġis Menu Open : ĠBoolean , ĠonClick : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġ// Ġ 0 ĊĠĠĠ ĠBox Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= Ġicon , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. graphics Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation X Ġ= Ġanimate Float As State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Menu Open ) Ġdistance Ġ* ĠMath . cos ( Math . to Radians ( degrees )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toFloat () Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Y Ġ= Ġanimate Float As State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Menu Open ) Ġdistance Ġ* ĠMath . sin ( Math . to Radians ( degrees )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toFloat () Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). click able ( onClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Circle ", Ġ" Button ĠClick ed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( animate Float As State ( target Value Ġ= Ġif Ġ( is Menu Open ) Ġ 1 f Ġelse Ġ 0 f ). value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( color Ġ= ĠbackgroundColor , Ġshape Ġ= ĠCircle Shape ). padding ( 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠColor . White ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠMenu Option Model Ġ( ĊĠĠĠ Ġval Ġicon : ĠImage Vector , ĊĠĠĠ Ġval ĠbackgroundColor : ĠColor Ċ )