package Ġcom . co git ator . resizable tabs Ċ Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Argb Evaluator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAn kit ĠK umar Ġ( ank it d roid developer @ gmail . com ) Ġon Ġ 0 4 / 0 5 / 2 0 1 8 Ġ( MM / DD / YYYY ) Ċ Ġ*/ Ċ class ĠRes izable Tab Item View Ġ: ĠLinearLayout Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ ĠCOL LAP SED , ĠEX PAN DED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm Size : ĠFloat Ġ= Ġ 0 . 0 f ĊĊĠĠĠ Ġprivate Ġvar Ġfrom Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġto Color : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġicon From Color : ĠInt Ġ= ĠContext Compat . getColor ( context , ĠR . color . rtl _ icon _ from _ color ) ĊĠĠĠ Ġprivate Ġval Ġicon To Color : ĠInt Ġ= ĠContext Compat . getColor ( context , ĠR . color . rtl _ icon _ to _ color ) ĊĊĠĠĠ Ġprivate Ġvar Ġpath : ĠPath ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrect F : ĠRect F ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmask Paint : ĠPaint ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstate : ĠState Ġ= ĠState . COLL AP SED ĊĊĠĠĠ Ġprivate Ġvar Ġsize Animator : ĠValue Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlayout Color Animator : ĠValue Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġicon Color Animator : ĠValue Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġanim ator Set : ĠAn imator Set ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Width : ĠFloat Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Height : ĠFloat Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġradius : ĠFloat Ġ= Ġ 0 . 0 f ĊĊĠĠĠ Ġprivate Ġvar ĠimageView : ĠImageView ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġrect F Ġ= ĠRect F ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġmask Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġmask Paint ?. xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . DST _ IN ) ĊĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . WRAP _ CONTENT , ĠLinearLayout . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . CENTER ĊĊĠĠĠĠĠĠĠ Ġval ĠimageView LayoutParams Ġ= ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . WRAP _ CONTENT , ĠLinearLayout . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ ĠimageView Ġ= ĠImageView ( context ) ĊĠĠĠĠĠĠĠ ĠimageView ?. layout Params Ġ= ĠimageView LayoutParams ĊĠĠĠĠĠĠĠ Ġadd View ( imageView ) ĊĊĠĠĠĠĠĠĠ Ġset Layer Type ( LAYER _ TYPE _ HARD WARE , Ġnull ) ĊĠĠĠĠĠĠĠ Ġset BackgroundColor ( from Color ) ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( m Width . toInt (), Ġm Height . toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsave Ġ= Ġcanvas !!. save () ĊĠĠĠĠĠĠĠ Ġsuper . dispatch Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( save ) ĊĊĠĠĠĠĠĠĠ Ġpath ?. reset () ĊĠĠĠĠĠĠĠ Ġpath ?. add Round Rect ( rect F , Ġradius , Ġradius , ĠPath . Direction . CC W ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġmask Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset From Color ( from Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . from Color Ġ= Ġfrom Color ĊĠĠĠĠĠĠĠ Ġset BackgroundColor ( from Color ) ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset To Color ( to Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . to Color Ġ= Ġto Color ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Drawable ( drawable : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrawable ?. color Filter Ġ= ĠPort er D uff Color Filter ( icon From Color , ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView ?. background Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView ?. setBackground Drawable ( drawable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Item Size ( m Size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinitialize Size ( m Size ) ĊĠĠĠĠĠĠĠ Ġinitialize Anim ators () ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexpand () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . EXP AN DED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . EXP AN DED ĊĠĠĠĠĠĠĠ Ġsize Animator ?. set Float Values ( m Size , Ġm Size Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġlayout Color Animator ?. set Object Values ( from Color , Ġto Color ) ĊĠĠĠĠĠĠĠ Ġicon Color Animator ?. set Object Values ( icon From Color , Ġicon To Color ) ĊĠĠĠĠĠĠĠ Ġanim ator Set ?. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcollapse () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . COLL AP SED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . COLL AP SED ĊĠĠĠĠĠĠĠ Ġsize Animator ?. set Float Values ( m Size Ġ* Ġ 2 , Ġm Size ) ĊĠĠĠĠĠĠĠ Ġlayout Color Animator ?. set Object Values ( to Color , Ġfrom Color ) ĊĠĠĠĠĠĠĠ Ġicon Color Animator ?. set Object Values ( icon To Color , Ġicon From Color ) ĊĠĠĠĠĠĠĠ Ġanim ator Set ?. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Anim ators () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Size Animator () ĊĠĠĠĠĠĠĠ Ġcreate Color Animator () ĊĠĠĠĠĠĠĠ Ġcreate Animator Set () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Size ( m Size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Size Ġ= Ġm Size ĊĠĠĠĠĠĠĠ Ġm Width Ġ= Ġm Size ĊĠĠĠĠĠĠĠ Ġm Height Ġ= Ġm Size ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġm Size Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġrect F ?. set ( 0 f , Ġ 0 f , Ġm Width , Ġm Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Size Animator () Ġ{ ĊĠĠĠĠĠĠĠ Ġsize Animator Ġ= ĠValue Animator . of Float ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġanim Duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanimation Ġ-> Ġcalculate B orders ( animation . animated Value Ġas ĠFloat ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Color Animator () Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Color Animator Ġ= ĠValue Animator . of Object ( Argb Evaluator (), Ġfrom Color , Ġto Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġanim Duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( animation . animated Value Ġas ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġicon Color Animator Ġ= ĠValue Animator . of Object ( Argb Evaluator (), Ġicon From Color , Ġicon To Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġanim Duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠimageView ?. background ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable ?. color Filter Ġ= ĠPort er D uff Color Filter ( animation . animated Value Ġas ĠInt , ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Animator Set () Ġ{ ĊĠĠĠĠĠĠĠ Ġanim ator Set Ġ= ĠAn imator Set (). apply Ġ{ Ġplay To gether ( size Animator , Ġlayout Color Animator , Ġicon Color Animator ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate B orders ( value : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġvalue . toInt () ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġm Width Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġm Height Ġ= Ġ( m Size Ġ+ Ġ(( value Ġ- Ġm Size ) Ġ* Ġmultiplier )). toFloat () ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġm Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġrect F ?. set ( 0 f , Ġ 0 f , Ġm Width , Ġm Height ) ĊĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// constants ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġanim Duration : ĠLong Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġmultiplier : ĠDouble Ġ= Ġ 0 . 1 5 ĊĠĠĠ Ġ} Ċ }