package Ġio . dev light . x tree ivi . sample Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Cycle Interpolator Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . view .* Ċ import Ġcom . google . android . material . math . Math Utils Ċ import Ġio . dev light . x tree ivi . corner cut linear layout . Corner Cut LinearLayout Ċ import Ġio . dev light . x tree ivi . sample . extensions .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ show case .* Ċ import Ġkotlin . math . h ypot Ċ import Ġkotlin . math . min Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . math . sqrt Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrunnable : ĠRunnable ĊĠĠĠ Ġprivate Ġval Ġline Count Runnable Ġ= Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( txt _ show case _ custom _ view _ area _ provider Ġ?: Ġreturn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġmax Lines . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( it Ġ+ Ġ 1 ) Ġ<= Ġ 5 ) Ġit Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( this , Ġ 2 0 0 0 L ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ show case ) ĊĊĠĠĠĠĠĠĠ Ġ// region ĠCustom ĠCor ner ĠCut ĊĠĠĠĠĠĠĠ Ġval Ġinset Ġ= Ġresources . display Metrics . density Ġ* Ġ 8 ĊĠĠĠĠĠĠĠ Ġval Ġeye Radius Ġ= Ġresources . display Metrics . density Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġhalf Open M outh Angle Ġ= Ġ 3 5 . 0 F ĊĠĠĠĠĠĠĠ Ġval Ġpac man M outh Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ lt _ rb . set Corner Cut Provider Ġ{ Ġ_, Ġcut out , Ġcut Edge , Ġrect F Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cut Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Corner Cut Flag . START _ TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . in set ( in set , Ġinset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . moveTo ( rect F . left , Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . right , Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . left , Ġrect F . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Corner Cut Flag . END _ BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . in set ( in set Ġ/ Ġ 2 . 0 F , Ġinset Ġ/ Ġ 2 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġrect F . height (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcircle Radius Ġ= Ġrect F . width () Ġ/ Ġ 2 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . add Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . add Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ- Ġcircle Radius Ġ/ Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CC W ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpac man M outh Path . rewind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpac man M outh Path . arc To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 F Ġ- Ġhalf Open M outh Angle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Open M outh Angle Ġ* Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpac man M outh Path . lineTo ( rect F . center X (), Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpac man M outh Path . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . op ( pac man M outh Path , ĠPath . Op . DI FFER ENCE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmax M outh Open Half Angle Ġ= Ġ 3 6 0 . 0 F ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Rotation Angle Ġ= Ġ 0 . 0 F ĊĠĠĠĠĠĠĠ Ġvar Ġlast Millis Ġ= Ġ- 1 L ĊĠĠĠĠĠĠĠ Ġvar Ġis Clock wise Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġrotation Duration Ġ= Ġ 2 0 0 0 L ĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ lt _ ex ceed _ bounds . set Corner Cut Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġview , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpb Ġ= Ġview . padded Bounds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( current Rotation Angle , Ġpb . center X (), Ġpb . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġview , Ġcut out , Ġcut Edge , Ġrect F Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cut Edge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Corner Cut Flag . START _ TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view . padded Bounds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . add Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter X () Ġ- Ġrect F . width () Ġ/ Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y () Ġ- Ġrect F . height () Ġ/ Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter X () Ġ+ Ġrect F . width () Ġ/ Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y () Ġ+ Ġrect F . height () Ġ/ Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrunnable Ġ= Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Millis Ġ== Ġ- 1 L ) Ġlast Millis Ġ= Ġnow Ġ- Ġ 1 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdt Ġ= Ġnow Ġ- Ġlast Millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Angle Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( max M outh Open Half Angle Ġ* Ġdt Ġ/ Ġrotation Duration ). let Ġ{ Ġif Ġ( is Clock wise ) Ġit Ġelse Ġ- it Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Millis Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Rotation Angle Ġ+= Ġd Angle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Rotation Angle Ġ<= Ġ 0 . 0 F ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Rotation Angle Ġ= Ġ 0 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Clock wise Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Rotation Angle Ġ>= Ġmax M outh Open Half Angle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Rotation Angle Ġ= Ġmax M outh Open Half Angle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Clock wise Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ lt _ ex ceed _ bounds ?. invalidate Corner Cut Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( this , Ġ 3 2 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// endregion ĊĊĠĠĠĠĠĠĠ Ġ// region ĠCustom ĠChild ĠCor ner ĠCut ĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ child _ cut _ provider . set Child Corner Cut Provider Ġ{ Ġview , Ġcut out , Ġ_, Ġrect F , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// rect F . in set (- 4 0 . 0 F , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . moveTo ( rect F . center X (), Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . arc To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top Ġ- Ġrect F . height () Ġ/ Ġ 3 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X () Ġ+ Ġrect F . width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top Ġ+ Ġrect F . height () Ġ/ Ġ 3 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 8 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġrect F . width (), Ġrect F . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . arc To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom Ġ- Ġrect F . height () Ġ/ Ġ 3 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X () Ġ+ Ġrect F . width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom Ġ+ Ġrect F . height () Ġ/ Ġ 3 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 8 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X (), Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Ch ord Width Ġ= Ġrect F . height () Ġ/ Ġ 2 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . add Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X () Ġ+ Ġrect F . width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Ch ord Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . moveTo ( rect F . center X () Ġ+ Ġrect F . width (), Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( view . padded Bounds . right Ġ- Ġrect F . width () Ġ/ Ġ 2 . 0 F , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġrect F . width (), Ġrect F . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġrect F . width (), Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ child _ cut _ provider _ mixed . set Child Corner Cut Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ_: ĠCor ner Cut LinearLayout , Ġ_: ĠPath , Ġcut Side : ĠInt , Ġrect F : ĠRect F , Ġ_: ĠView ?, Ġ_: ĠView ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cut Side ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Child Side Cut Flag . START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Sk ew (- 0 . 2 5 F , Ġ 0 . 0 F , Ġrect F . center X (), Ġrect F . center Y ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Child Side Cut Flag . END Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate (- 1 0 . 0 F , Ġrect F . center X (), Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Translate (- rect F . width () Ġ/ Ġ 2 . 0 F , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġview , Ġcut out , Ġcut Side , Ġrect F , Ġrelative Cut Top Child , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cut Side ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Child Side Cut Flag . START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . indexOf Child ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Cut Top Child Ġ?: Ġreturn @ set Child Corner Cut Provider Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġreturn @ set Child Corner Cut Provider Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġrect F . width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġrect F . height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . offset ( rect F . width () Ġ/ Ġ 2 . 0 F , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . moveTo ( rect F . center X (), Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 1 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 5 2 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 6 1 2 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 3 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 1 . 0 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X (), Ġrect F . top Ġ+ Ġ 0 . 7 6 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 3 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 1 . 0 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 6 1 2 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 5 2 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 1 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Child Side Cut Flag . END Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . indexOf Child ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Cut Top Child Ġ?: Ġreturn @ set Child Corner Cut Provider Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġreturn @ set Child Corner Cut Provider Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġrect F . width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġrect F . height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . moveTo ( rect F . center X (), Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 1 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 5 2 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 6 1 2 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 3 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 1 . 0 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X (), Ġrect F . top Ġ+ Ġ 0 . 7 6 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 3 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 1 . 0 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 6 1 2 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 5 2 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 1 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ view _ area _ provider . set Custom View Area Provider Ġ{ Ġview , Ġpath , Ġrect F Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġview [ 0 ]. margin End ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorner Radius Ġ= Ġrect F . height () Ġ/ Ġ 4 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtail Circle Radius Ġ= Ġcorner Radius Ġ/ Ġ 2 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Tail Circle Radius Ġ= Ġtail Circle Radius Ġ/ Ġ 2 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsmall Corner Radius Ġ= Ġcorner Radius Ġ/ Ġ 4 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . add Round Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo ( rect F . right Ġ- Ġoffset , Ġrect F . top Ġ+ Ġcorner Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . arc To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top Ġ+ Ġcorner Radius Ġ- Ġsmall Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġoffset Ġ+ Ġsmall Corner Radius Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top Ġ+ Ġcorner Radius Ġ+ Ġsmall Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 5 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . right Ġ- Ġtail Circle Radius , Ġrect F . center Y () Ġ- Ġinner Tail Circle Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġoffset Ġ+ Ġinner Tail Circle Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ- Ġinner Tail Circle Radius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . arc To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ- Ġinner Tail Circle Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġoffset Ġ+ Ġinner Tail Circle Radius Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ+ Ġinner Tail Circle Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 7 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 8 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . right Ġ- Ġtail Circle Radius , Ġrect F . center Y () Ġ+ Ġinner Tail Circle Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . arc To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom Ġ- Ġcorner Radius Ġ- Ġsmall Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġoffset Ġ+ Ġsmall Corner Radius Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom Ġ- Ġcorner Radius Ġ+ Ġsmall Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 3 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 5 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . right Ġ- Ġoffset , Ġrect F . top Ġ+ Ġcorner Radius ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcircle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . add Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġtail Circle Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtail Circle Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . add Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġtail Circle Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Tail Circle Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CC W ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġval Ġtemp Rect F Ġ= ĠRect F () ĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ view _ area _ provider _ 2 . set Custom View Area Provider Ġ{ Ġview , Ġpath , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . rewind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠCor ner Cut LinearLayout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . offset (- it . left . toFloat (), Ġ- it . top . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . add Path ( it . view Area Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . transform ( it . matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . offset ( it . left . toFloat (), Ġit . top . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Rect F . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . left . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . top . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . right . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . bottom . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Corner Radius Ġ= Ġmin ( temp Rect F . width (), Ġtemp Rect F . height ()) Ġ/ Ġ 6 . 0 F ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . add Round Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Rect F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . offset (- it . left . toFloat (), Ġ- it . top . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . transform ( it . matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Path . offset ( it . left . toFloat (), Ġit . top . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . op ( temp Path , ĠPath . Op . UNION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ view _ area _ provider _ 2 _ child _ 1 . add Custom Cut out Provider Ġ{ Ġ_, Ġcut out , Ġrect F Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġrect F . width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġrect F . height () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . moveTo ( rect F . center X (), Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 1 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 5 2 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 6 1 2 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ+ Ġ 0 . 3 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 1 . 0 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X (), Ġrect F . top Ġ+ Ġ 0 . 7 6 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 3 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 1 . 0 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 6 1 2 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 5 2 2 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . center X () Ġ- Ġ 0 . 1 2 5 F Ġ* Ġwidth , Ġrect F . top Ġ+ Ġ 0 . 3 8 F Ġ* Ġheight ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwave Line Cut Width Ġ= Ġresources . get Dimension ( R . dim en . offset _ 1 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġwave Line Height Ġ= Ġresources . get Dimension ( R . dim en . offset _ 4 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġhalf Wave Line Height Ġ= Ġwave Line Height Ġ/ Ġ 2 . 0 F ĊĠĠĠĠĠĠĠ Ġval Ġhalf Wave Line Cut Width Ġ= Ġwave Line Cut Width Ġ/ Ġ 2 . 0 F ĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ view _ area _ provider _ 2 . add Custom Cut out Provider Ġ{ Ġ_, Ġcut out , Ġrect F Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . moveTo ( rect F . left , Ġrect F . center Y () Ġ- Ġhalf Wave Line Cut Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . left Ġ+ Ġrect F . width () Ġ/ Ġ 4 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ- Ġhalf Wave Line Cut Width Ġ- Ġhalf Wave Line Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġrect F . width () Ġ/ Ġ 4 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ- Ġhalf Wave Line Cut Width Ġ+ Ġhalf Wave Line Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . right , Ġrect F . center Y () Ġ- Ġhalf Wave Line Cut Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . right , Ġrect F . center Y () Ġ+ Ġhalf Wave Line Cut Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ- Ġrect F . width () Ġ/ Ġ 4 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ+ Ġhalf Wave Line Cut Width Ġ+ Ġhalf Wave Line Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . left Ġ+ Ġrect F . width () Ġ/ Ġ 4 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ+ Ġhalf Wave Line Cut Width Ġ- Ġhalf Wave Line Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . left , Ġrect F . center Y () Ġ+ Ġhalf Wave Line Cut Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . lineTo ( rect F . left , Ġrect F . center Y () Ġ- Ġhalf Wave Line Cut Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ view _ area _ provider _ 2 . do On NonNull Size Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Child Ġ= Ġit [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Child Ġ= Ġit [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmiddle Child Ġ= Ġit [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Child Travel X Ġ= Ġit . width . toFloat () Ġ- Ġlast Child . width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmiddle Child Travel Y Ġ= Ġit . height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmiddle Child . translation Y Ġ= Ġ-( middle Child . top . toFloat () Ġ+ Ġmiddle Child . height Ġ/ Ġ 2 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Child . translation X Ġ= Ġ- last Child . left . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġanimate First Child () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Child ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. rotation By ( 3 6 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 4 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Child ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. rotation X By ( 3 6 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Child ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. rotation Y By ( 3 6 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate First Child () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġanimate Middle Child () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmiddle Child ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y By ( middle Child Travel Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration (( 2 5 0 0 L .. 5 0 0 0 L ). random ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Cycle Interpolator ( 0 . 5 F )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ Ġanimate Middle Child () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġanimate Last Child () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Child ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X By ( last Child Travel X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Cycle Interpolator ( 0 . 5 F )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 4 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ view _ area _ provider _ 2 . invalidate Corner Cut Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Last Child () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate First Child () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Middle Child () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Last Child () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// endregion ĊĊĠĠĠĠĠĠĠ Ġ// region ĠCut ĠProperties ĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ depth _ and _ length . do On NonNull Size Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdepth Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( c cl l _ show case _ depth _ and _ length . width Ġ- Ġc cl l _ show case _ depth _ and _ length . padding End Ġ- Ġc cl l _ show case _ depth _ and _ length . child End Side Corner Cut Depth Ġ/ Ġ 2 . 0 F ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv _ show case _ bounds _ depth _ offset ?. update LayoutParams < Frame Layout . LayoutParams > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Start Ġ= Ġdepth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ depth _ and _ length _ offset . do On NonNull Size Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l _ show case _ depth _ and _ length _ offset . child End Side Corner Cut Depth Offset Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . padded Bounds . width () Ġ- Ġit . child Start Side Corner Cut Depth ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġv _ show case _ max _ cut . duplicate View Size Continuous ly ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l _ show case _ max _ cut , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Width Ġ= Ġ{ Ġ( c cl l _ show case _ max _ cut . padded Bounds . width () Ġ/ Ġ 2 ). round ToInt () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Height Ġ= Ġ{ Ġ( c cl l _ show case _ max _ cut . padded Bounds . height () Ġ/ Ġ 2 ). round ToInt () Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġv _ show case _ max _ cut _ equal . duplicate View Size Continuous ly ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l _ show case _ max _ cut _ equal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Width Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l _ show case _ max _ cut _ equal . padded Bounds . let Ġ{ Ġmin ( it . width (), Ġit . height ()) Ġ/ Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Height Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l _ show case _ max _ cut _ equal . padded Bounds . let Ġ{ Ġmin ( it . width (), Ġit . height ()) Ġ/ Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpure Raw Size Ġ= Ġresources . get Dimension ( R . dim en . offset _ 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġaction : Ġ( view : ĠCor ner Cut LinearLayout ) Ġ-> ĠUnit Ġ= Ġ{ Ġc cl l Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Animation Running Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxWidth Ġ= Ġc cl l . width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxHeight Ġ= Ġc cl l . height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠminWidth Ġ= Ġpure Raw Size Ġ+ Ġc cl l . horizontal Padding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠminHeight Ġ= Ġpure Raw Size Ġ+ Ġc cl l . vertical Padding ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġplay Animation () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Animation Running ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Animation Running Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġ( c cl l Ġas ? ĠViewGroup )?. get OrNull < TextView >( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView ?. text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcycle View Width ( c cl l , ĠminWidth , ĠmaxWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcycle View Height ( c cl l , ĠminHeight , ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcycle View Width And Height ( c cl l , ĠminWidth , ĠmaxWidth , ĠminHeight , ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView ?. text Ġ= Ġ" CLICK " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Animation Running Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ max _ cut . do On NonNull Size Layout ( action ) ĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ max _ cut _ equal . do On NonNull Size Layout ( action ) ĊĠĠĠĠĠĠĠ Ġ// endregion ĊĊĠĠĠĠĠĠĠ Ġ// region ĠCustom ĠDiv ider ĊĠĠĠĠĠĠĠ Ġval Ġtop Divider Triangle Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġval Ġbottom Divider Triangle Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġval Ġcircle Dot Divider Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġval Ġdi amond Dot Divider Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġval Ġtriangle Base Width Ġ= Ġresources . get Dimension ( R . dim en . offset _ 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġtriangle Height Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Base Width Ġ* Ġsqrt ( 3 . 0 F ) Ġ/ Ġ 2 . 0 F Ġ Ġ/* extra Ġheight Ġmultiplier */ Ġ* Ġ 2 . 0 F ĊĠĠĠĠĠĠĠ Ġval Ġcircle Radius Ġ= Ġresources . get Dimension ( R . dim en . offset _ 6 ) ĊĊĠĠĠĠĠĠĠ Ġtop Divider Triangle Path . moveTo ( 0 . 0 F , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠ Ġtop Divider Triangle Path . lineTo ( triangle Base Width , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠ Ġtop Divider Triangle Path . lineTo ( triangle Base Width Ġ/ Ġ 2 . 0 F , Ġtriangle Height ) ĊĠĠĠĠĠĠĠ Ġtop Divider Triangle Path . close () ĊĊĠĠĠĠĠĠĠ Ġbottom Divider Triangle Path . moveTo ( 0 . 0 F , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠ Ġbottom Divider Triangle Path . lineTo ( triangle Base Width Ġ/ Ġ 2 . 0 F , Ġ- triangle Height ) ĊĠĠĠĠĠĠĠ Ġbottom Divider Triangle Path . lineTo ( triangle Base Width , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠ Ġbottom Divider Triangle Path . close () ĊĊĠĠĠĠĠĠĠ Ġcircle Dot Divider Path . add Circle ( 0 . 0 F , Ġ 0 . 0 F , Ġcircle Radius , ĠPath . Direction . CW ) ĊĠĠĠĠĠĠĠ Ġcircle Dot Divider Path . close () ĊĊĠĠĠĠĠĠĠ Ġdi amond Dot Divider Path . moveTo ( 0 . 0 F , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠ Ġdi amond Dot Divider Path . lineTo ( triangle Base Width Ġ/ Ġ 2 . 0 F , Ġ- triangle Base Width Ġ/ Ġ 2 . 0 F ) ĊĠĠĠĠĠĠĠ Ġdi amond Dot Divider Path . lineTo ( triangle Base Width , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠ Ġdi amond Dot Divider Path . lineTo ( triangle Base Width Ġ/ Ġ 2 . 0 F , Ġtriangle Base Width Ġ/ Ġ 2 . 0 F ) ĊĠĠĠĠĠĠĠ Ġdi amond Dot Divider Path . close () ĊĠĠĠĠĠĠĠ Ġdi amond Dot Divider Path . offset (- triangle Base Width Ġ/ Ġ 2 . 0 F , Ġ 0 . 0 F ) ĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ divider _ provider . do On NonNull Size Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpb Ġ= Ġc cl l _ show case _ custom _ divider _ provider . padded Bounds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ divider _ provider . custom Divider Provider Paint . shader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRad ial Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb . center Y (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh ypot ( pb . width () Ġ/ Ġ 2 . 0 F , Ġpb . height () Ġ/ Ġ 2 . 0 F ) Ġ* Ġ 0 . 8 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . BLACK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . WHITE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . CLAMP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ divider _ provider . set Custom Divider Provider Ġ{ Ġ_, Ġdivider Path , Ġdivider Paint , Ġshow Divider Flag , Ġdivider Type Index , Ġrect F Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( show Divider Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Custom Divider Show Flag . CONTAINER _ BEGIN NING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . stroke Width Ġ= Ġtriangle Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . path Effect Ġ= ĠPath Dash Path Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Divider Triangle Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Base Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Dash Path Effect . Style . TRANSL ATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . moveTo ( rect F . left , Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . lineTo ( rect F . right , Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Custom Divider Show Flag . MIDDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( divider Type Index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . stroke Width Ġ= Ġcircle Radius ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . path Effect Ġ= ĠPath Dash Path Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Dot Divider Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Base Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Dash Path Effect . Style . TRANSL ATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . moveTo ( rect F . left , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . lineTo ( rect F . right Ġ+ Ġtriangle Base Width , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . stroke Width Ġ= Ġcircle Radius ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . path Effect Ġ= ĠPath Dash Path Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdi amond Dot Divider Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Base Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Dash Path Effect . Style . TRANSL ATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . moveTo ( rect F . left , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . lineTo ( rect F . right Ġ+ Ġtriangle Base Width , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Custom Divider Show Flag . CONTAINER _ END Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . stroke Width Ġ= Ġtriangle Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . path Effect Ġ= ĠPath Dash Path Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Divider Triangle Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Base Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Dash Path Effect . Style . TRANSL ATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . moveTo ( rect F . left , Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . lineTo ( rect F . right , Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwave Path Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġval Ġhalf Wave Width Ġ= Ġresources . get Dimension ( R . dim en . offset _ 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġhalf Wave Height Ġ= Ġresources . get Dimension ( R . dim en . offset _ 8 ) ĊĠĠĠĠĠĠĠ Ġwave Path . moveTo ( 0 . 0 F , Ġ 0 . 0 F ) ĊĠĠĠĠĠĠĠ Ġwave Path . arc To ( 0 . 0 F , Ġ- half Wave Height , Ġhalf Wave Width , Ġhalf Wave Height , Ġ 1 8 0 . 0 F , Ġ 1 8 0 . 0 F , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġwave Path . arc To ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Wave Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- half Wave Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Wave Width Ġ* Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Wave Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 8 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġc cl l _ show case _ custom _ divider _ provider _ mixed . set Custom Divider Provider Ġ{ Ġ_, Ġdivider Path , Ġdivider Paint , Ġshow Divider Flag , Ġdivider Type Index , Ġrect F Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( show Divider Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor ner Cut LinearLayout . Custom Divider Show Flag . MIDDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( divider Type Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . shader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRad ial Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . width () Ġ/ Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . GREEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . RED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . MIR ROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . stroke Width Ġ= Ġcircle Radius ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . path Effect Ġ= ĠPath Dash Path Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdi amond Dot Divider Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Base Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Dash Path Effect . Style . TRANSL ATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . moveTo ( rect F . left , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . lineTo ( rect F . right Ġ+ Ġtriangle Base Width , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Custom Divider Provider Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . shader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ- Ġhalf Wave Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . center Y () Ġ+ Ġhalf Wave Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . BLUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . YELLOW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . CLAMP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . stroke Width Ġ= Ġhalf Wave Height Ġ* Ġ 2 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Paint . path Effect Ġ= ĠPath Dash Path Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwave Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Wave Width Ġ* Ġ 2 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Dash Path Effect . Style . TRANSL ATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . moveTo ( rect F . left , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Path . lineTo ( rect F . right , Ġrect F . center Y ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Custom Divider Provider Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn @ set Custom Divider Provider Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// endregion ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcycle View Width ( view : ĠView , ĠminWidth : ĠFloat , ĠmaxWidth : ĠFloat , Ġon End : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X ( 0 . 5 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Cycle Interpolator ( 0 . 5 F )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġit . animated Fraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠMath Utils . lerp ( maxWidth , ĠminWidth , Ġfraction ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ Ġon End () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcycle View Height ( view : ĠView , ĠminHeight : ĠFloat , ĠmaxHeight : ĠFloat , Ġon End : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X ( 0 . 5 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Cycle Interpolator ( 0 . 5 F )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġit . animated Fraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠMath Utils . lerp ( max Height , ĠminHeight , Ġfraction ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ Ġon End () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcycle View Width And Height ( ĊĠĠĠĠĠĠĠ Ġview : ĠView , ĊĠĠĠĠĠĠĠ ĠminWidth : ĠFloat , ĊĠĠĠĠĠĠĠ ĠmaxWidth : ĠFloat , ĊĠĠĠĠĠĠĠ ĠminHeight : ĠFloat , ĊĠĠĠĠĠĠĠ ĠmaxHeight : ĠFloat , ĊĠĠĠĠĠĠĠ Ġon End : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation X ( 0 . 5 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Cycle Interpolator ( 0 . 5 F )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġit . animated Fraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠMath Utils . lerp ( maxWidth , ĠminWidth , Ġfraction ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠMath Utils . lerp ( max Height , ĠminHeight , Ġfraction ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action Ġ{ Ġon End () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ(:: run nable . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( run nable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post ( run nable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhandler . post ( line Count Runnable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ(:: run nable . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( run nable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( line Count Runnable ) ĊĠĠĠ Ġ} Ċ }