package Ġcom . ang cy o . u iv iew . less . widget . group Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . animation . Accel erate Interpolator Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . widget . Frame Layout Ċ import Ġcom . ang cy o . u iv iew . less . R Ċ import Ġcom . ang cy o . u iv iew . less . kotlin . calc Layout Width Height Ċ import Ġcom . ang cy o . u iv iew . less . kotlin . calc Width Height Ratio Ċ import Ġcom . ang cy o . u iv iew . less . kotlin . density Ċ import Ġcom . ang cy o . u iv iew . less . kotlin . exact ly Measure Ċ import Ġcom . ang cy o . u iv iew . less . resources . R Animator Listener Ċ import Ġcom . ang cy o . u iv iew . less . utils . Clip Helper Ċ Ċ /** Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 , æ·± åľ ³ å¸Ĥ çº¢ é¸ Ł ç½ĳç»ľ ç§ĳ æĬĢ èĤ¡ ä»½ æľī éĻĲ åħ¬åı¸ ĠAll Ġrights Ġreserved . Ċ Ġ* Ġ é¡¹çĽ® åĲįç§° ï¼ļ Ċ Ġ* Ġ ç±»çļĦ æııè¿° ï¼ļ Ċ Ġ* ĠåĪĽå»º äººåĳĺ ï¼ļ Rob i Ċ Ġ* ĠåĪĽå»º æĹ¶éĹ´ ï¼ļ 2 0 1 7 / 0 8 / 2 6 Ġ 1 3 : 3 9 Ċ Ġ* Ġä¿®æĶ¹ äººåĳĺ ï¼ļ Rob i Ċ Ġ* Ġä¿®æĶ¹ æĹ¶éĹ´ ï¼ļ 2 0 1 7 / 0 8 / 2 6 Ġ 1 3 : 3 9 Ċ Ġ* Ġä¿®æĶ¹ å¤ĩ æ³¨ ï¼ļ Ċ Ġ* ĠVersion : Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ open Ġclass ĠClip Layout ( context : ĠContext , Ġattribute Set : ĠAttributeSet ? Ġ= Ġnull ) Ġ: ĠFrame Layout ( context , Ġattribute Set ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ä¸į åī ª åĪĩ */ ĊĠĠĠĠĠĠĠ Ġval ĠCLI P _ TYPE _ NONE Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ/** é»ĺè®¤ ( æľī ä¸Ģå®ļ å°ı åľĨ è§Ĵ çļĦ CLIP _ TYPE _ ROUND ) */ ĊĠĠĠĠĠĠĠ Ġval ĠCLI P _ TYPE _ DEFAULT Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ/** åľĨ è§Ĵ ( åı¯ä»¥éĢļè¿ĩ ae q Width å±ŀæĢ§ , Ġ åĪĩæį¢ æŃ£ æĸ¹ å½¢ è¿ĺæĺ¯ éķ¿ æĸ¹ å½¢ ) */ ĊĠĠĠĠĠĠĠ Ġval ĠCLI P _ TYPE _ ROUND Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ/** åľĨ */ ĊĠĠĠĠĠĠĠ Ġval ĠCLI P _ TYPE _ CIR CLE Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġ/** çĽ´ è§Ĵ çŁ© å½¢ ( æĹł åľĨ è§Ĵ çĬ¶æĢģ ) */ ĊĠĠĠĠĠĠĠ Ġval ĠCLI P _ TYPE _ RECT Ġ= Ġ 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġclip Type Ġ= ĠCLI P _ TYPE _ NONE ĊĊĠĠĠ Ġprivate Ġval Ġdefault Clip Radius Ġ= Ġ 3 Ġ* Ġdensity ĊĊĠĠĠ Ġvar Ġr Background Drawable : ĠDrawable ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** å½ĵ clip Type ä¸º CLIP _ TYPE _ CIR CLE æĹ¶ , Ġ è¿Ļä¸ª åĢ¼ è¡¨ç¤º åľĨ çļĦ åįĬ å¾Ħ , Ġ åĲ¦åĪĻ å°±æĺ¯ åľĨ è§Ĵ çļĦ åįĬ å¾Ħ */ ĊĠĠĠ Ġvar Ġclip Radius Ġ= Ġdefault Clip Radius ĊĊĠĠĠ Ġ/** å¼ķ å¯¼ æ¨¡å¼ı , Ġä¼ļ éķ Ĥ ç©º å¸ĥå±Ģ , Ġåıª åľ¨ CLIP _ TYPE _ CIR CLE çĶŁ æķĪ */ ĊĠĠĠ Ġvar Ġguid Mode Ġ= Ġfalse ĊĊĠĠĠ Ġ/** æĺ¯åĲ¦ æĺ¯ çŃī å®½ çŁ© å½¢ */ ĊĠĠĠ Ġprivate Ġvar Ġa eq Width Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġr Layout Width : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġr Layout Height : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġr Layout Width Exclude Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġr Layout Height Exclude Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġwidth Height Ratio : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġpaint Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġmask Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠ Ġval Ġmask Paint : ĠPaint Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Filter Bitmap Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attribute Set , ĠR . style able . Clip Layout ) ĊĠĠĠĠĠĠĠ Ġclip Type Ġ= Ġtyped Array . getInt ( R . style able . Clip Layout _ r _ clip _ type , Ġclip Type ) ĊĠĠĠĠĠĠĠ Ġclip Radius Ġ= Ġtyped Array . get Dimension Pixel Offset ( R . style able . Clip Layout _ r _ clip _ radius , Ġdefault Clip Radius . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toFloat () ĊĠĠĠĠĠĠĠ Ġr Background Drawable Ġ= Ġtyped Array . get Drawable ( R . style able . Clip Layout _ r _ background ) ĊĠĠĠĠĠĠĠ Ġa eq Width Ġ= Ġtyped Array . getBoolean ( R . style able . Clip Layout _ r _ is _ ae q _ width , Ġa eq Width ) ĊĠĠĠĠĠĠĠ Ġr Layout Width Ġ= Ġtyped Array . getString ( R . style able . Clip Layout _ r _ layout _ width ) ĊĠĠĠĠĠĠĠ Ġr Layout Height Ġ= Ġtyped Array . getString ( R . style able . Clip Layout _ r _ layout _ height ) ĊĠĠĠĠĠĠĠ Ġr Layout Width Exclude Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . get Dimension Pixel Offset ( R . style able . Clip Layout _ r _ layout _ width _ exclude , Ġr Layout Width Exclude ) ĊĠĠĠĠĠĠĠ Ġr Layout Height Exclude Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . get Dimension Pixel Offset ( R . style able . Clip Layout _ r _ layout _ height _ exclude , Ġr Layout Height Exclude ) ĊĠĠĠĠĠĠĠ Ġwidth Height Ratio Ġ= Ġtyped Array . getString ( R . style able . Clip Layout _ r _ width _ height _ ratio ) ĊĠĠĠĠĠĠĠ Ġmask Drawable Ġ= Ġtyped Array . get Drawable ( R . style able . Clip Layout _ r _ mask _ drawable ) ĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĊĠĠĠĠĠĠĠ Ġset Will Not Draw ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclip Path : ĠPath Ġby Ġlazy Ġ{ ĠPath () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġround Rect F : ĠRect F Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠRect F () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsize ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠMath . min ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Height Ġ/* - Ġpadding Top Ġ- Ġpadding Bottom */, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Width Ġ/* - Ġpadding Left Ġ- Ġpadding Right */ ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġcx ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( padding Left Ġ+ Ġ( meas ured Width Ġ- Ġpadding Left Ġ- Ġpadding Right ) Ġ/ Ġ 2 ). toFloat () ĊĊĠĠĠ Ġprivate Ġval Ġcy ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( padding Top Ġ+ Ġ( meas ured Height Ġ- Ġpadding Top Ġ- Ġpadding Bottom ) Ġ/ Ġ 2 ). toFloat () ĊĊĠĠĠ Ġprivate Ġval Ġcr ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( size Ġ/ Ġ 2 ). toFloat () ĊĊĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ae q Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġround Rect F . set ( cx Ġ- Ġcr , Ġcy Ġ- Ġcr , Ġcx Ġ+ Ġcr , Ġcy Ġ+ Ġcr ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġround Rect F . set ( padding Left . toFloat (), Ġpadding Top . toFloat (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( meas ured Width Ġ- Ġpadding Right ). toFloat (), Ġ( meas ured Height Ġ- Ġpadding Bottom ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġround Rect F . set ( 0 f , Ġ 0 f , Ġmeasured Width . toFloat (), Ġmeasured Height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġr Background Drawable ?. setBounds ( 0 , Ġ 0 , Ġmeasured Width , Ġmeasured Height ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( guid Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġguid Bitmap ?. recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġguid Bitmap Ġ= ĠBitmap . create Bitmap ( meas ured Width , Ġmeasured Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġguid Canvas Ġ= ĠCanvas ( guid Bitmap !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġguid Bitmap : ĠBitmap ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġguid Canvas : ĠCanvas ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġguid Mask Color Ġ= ĠColor . parse Color ("# 4 0 0 0 0 0 0 0 ") ĊĠĠĠ Ġvar Ġguid Color Ġ= ĠColor . TRANSP ARENT ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( guid Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . xfer mode Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġguid Mask Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġguid Canvas ?. draw Rect ( 0 f , Ġ 0 f , Ġmeasured Width . toFloat (), Ġmeasured Height . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ OUT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġguid Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġguid Canvas ?. draw Circle ( cx , Ġcy , Ġclip Radius , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . xfer mode Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( guid Bitmap !! , Ġ 0 f , Ġ 0 f , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Background Drawable ?. draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclip Path . reset () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( clip Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI P _ TYPE _ NONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI P _ TYPE _ ROUND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Path . add Round Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġround Rect F , Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Radius , Ġclip Radius , Ġclip Radius , Ġclip Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Radius , Ġclip Radius , Ġclip Radius , Ġclip Radius ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( clip Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI P _ TYPE _ CIR CLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Path . add Circle ( cx , Ġcy , Ġclip Radius , ĠPath . Direction . CW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( clip Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI P _ TYPE _ DEFAULT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Path . add Round Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġround Rect F , Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Clip Radius , Ġdefault Clip Radius , Ġdefault Clip Radius , Ġdefault Clip Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Clip Radius , Ġdefault Clip Radius , Ġdefault Clip Radius , Ġdefault Clip Radius ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( clip Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI P _ TYPE _ RECT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Path . add Rect ( round Rect F , ĠPath . Direction . CW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( clip Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// canvas . draw Color ( Color . RED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( mask Drawable Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save Layer ( 0 f , Ġ 0 f , Ġwidth . toFloat (), Ġheight . toFloat (), Ġnull , ĠCanvas . ALL _ SAVE _ FLAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask Drawable !!. setBounds ( 0 , Ġ 0 , Ġwidth , Ġheight ) Ġ// éľĢè¦ģ å¤ĦçĲĨ padding ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask Drawable !!. draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save Layer ( 0 f , Ġ 0 f , Ġwidth . toFloat (), Ġheight . toFloat (), Ġmask Paint , ĠCanvas . ALL _ SAVE _ FLAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġanim ator : ĠValue Animator ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġclip Anim Time Ġ= Ġ 1 6 0 L ĊĊĠĠĠ Ġ/** clip åĪ° æĮĩå®ļçļĦ å®½ é«ĺ */ ĊĠĠĠ Ġfun Ġclip Rect To ( w : ĠFloat , Ġh : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclip Type Ġ= ĠCLI P _ TYPE _ RECT ĊĠĠĠĠĠĠĠ Ġround Rect F . set ( cx Ġ- Ġw Ġ/ Ġ 2 , Ġcy Ġ- Ġh Ġ/ Ġ 2 , Ġcx Ġ+ Ġw Ġ/ Ġ 2 , Ġcy Ġ+ Ġh Ġ/ Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// L . e (" call : Ġclip Rect To Ġ-> ĠW :$ w ĠH :$ h ĠW 2 :${ round Rect F . width ()} ĠH 2 :${ round Rect F . height () }") ĊĊĠĠĠĠĠĠĠ Ġpost Invalidate On Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** to Max From */ ĊĠĠĠ Ġfun Ġget To Max WH ( from Width : ĠInt , Ġfrom Height : ĠInt , Ġfraction : ĠFloat Ġ/* 0 - 1 f */ ): ĠFloat Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġw : ĠFloat Ġ= Ġfrom Width Ġ+ Ġ( meas ured Width Ġ- Ġfrom Width ) Ġ* Ġfraction ĊĠĠĠĠĠĠĠ Ġval Ġh : ĠFloat Ġ= Ġfrom Height Ġ+ Ġ( meas ured Height Ġ- Ġfrom Height ) Ġ* Ġfraction ĊĠĠĠĠĠĠĠ Ġreturn Ġfloat ArrayOf ( w , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** from Max To */ ĊĠĠĠ Ġfun Ġget From Max WH ( to Width : ĠInt , Ġto Height : ĠInt , Ġfraction : ĠFloat Ġ/* 0 - 1 f */ ): ĠFloat Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġw : ĠFloat Ġ= Ġmeasured Width Ġ- Ġ( meas ured Width Ġ- Ġto Width ) Ġ* Ġfraction ĊĠĠĠĠĠĠĠ Ġval Ġh : ĠFloat Ġ= Ġmeasured Height Ġ- Ġ( meas ured Height Ġ- Ġto Height ) Ġ* Ġfraction ĊĠĠĠĠĠĠĠ Ġreturn Ġfloat ArrayOf ( w , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Max From Circle ( cr : ĠFloat , Ġon Anim End : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( anim ator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( cr , ĠClip Helper . calc End Radius ( meas ured Width , Ġmeasured Height , Ġcx , Ġcy )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġclip Anim Time . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠAccel erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠFloat Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Type Ġ= ĠCLI P _ TYPE _ CIR CLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Radius Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate On Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠR Animator Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Finish ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation Finish ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Anim End ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Type Ġ= ĠCLI P _ TYPE _ CIR CLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Radius Ġ= Ġcr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate On Animation () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä»¥ å±ı å¹ķ ä¸Ńå¿ĥ ä¸º åĿĲæłĩ ĊĠĠĠĠ Ġ* Ġä»İ æĮĩå®ļçļĦ å®½ é«ĺ åĪ° æľ¬ èº« çļĦ å®½ é«ĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġto Max From ( width : ĠInt , Ġheight : ĠInt , Ġon Anim End : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( anim ator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Ġ= ĠObject Animator . of Float ( 0 f , Ġ 1 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġclip Anim Time . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠAccel erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠFloat Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw : ĠFloat Ġ= Ġwidth Ġ+ Ġ( meas ured Width Ġ- Ġwidth ) Ġ* Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh : ĠFloat Ġ= Ġheight Ġ+ Ġ( meas ured Height Ġ- Ġheight ) Ġ* Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Rect To ( w , Ġh ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠR Animator Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Finish ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation Finish ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Rect To ( width . toFloat (), Ġheight . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä»¥ å±ı å¹ķ ä¸Ńå¿ĥ ä¸º åĿĲæłĩ ĊĠĠĠĠ Ġ* Ġä»İ æľ¬ èº« çļĦ å®½ é«ĺ åĪ° æĮĩå®ļçļĦ å®½ é«ĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġfrom Max To ( width : ĠInt , Ġheight : ĠInt , Ġon Anim End : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( anim ator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Ġ= ĠObject Animator . of Float ( 0 f , Ġ 1 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġclip Anim Time . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠFloat Ġ= Ġanimation . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw : ĠFloat Ġ= Ġmeasured Width Ġ- Ġ( meas ured Width Ġ- Ġwidth ) Ġ* Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh : ĠFloat Ġ= Ġmeasured Height Ġ- Ġ( meas ured Height Ġ- Ġheight ) Ġ* Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Rect To ( w , Ġh ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠR Animator Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Finish ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation Finish ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Type Ġ= ĠCLI P _ TYPE _ RECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġround Rect F . set ( 0 f , Ġ 0 f , Ġmeasured Width . toFloat (), Ġmeasured Height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġguid Bitmap ?. recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Width Height Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc Layout Width Height ( r Layout Width , Ġr Layout Height , Ġr Layout Width Exclude , Ġr Layout Height Exclude ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġlayout Width Height [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġlayout Width Height [ 1 ] ĊĠĠĠĠĠĠĠ Ġif Ġ( width Ġ== Ġ- 1 Ġ&& Ġheight Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( width Ġ> Ġ 0 Ġ&& Ġheight Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Measure ( exact ly Measure ( width ), Ġexactly Measure ( height )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġexactly Measure ( height )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Measure ( exact ly Measure ( width ), Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcalc Width Height Ratio ( width Height Ratio )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Measure ( exact ly Measure ( it [ 0 ]), Ġexactly Measure ( it [ 1 ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }