package Ġcom . an ik et . mut ative floating action button Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . graphics . drawable . Layer Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . support . constraint . Constraint Layout Ċ import Ġandroid . support . constraint . Constraint Set Ċ import Ġandroid . support . design . widget . Coordinator Layout Ċ import Ġandroid . support . transition . Change Bounds Ċ import Ġandroid . support . transition . Transition Manager Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġan ik et Ġon Ġ 0 3 - 1 2 - 2 0 1 7 . Ċ Ġ*/ Ċ Ċ @ Coordinator Layout . Default Behavior ( Snackbar Behavior :: class ) Ċ class ĠMut ative Fab Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġattribute Set : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdef Style : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠConstraint Layout ( context , Ġattribute Set , Ġdef Style ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠimageView : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠtextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconstraint Layout : ĠConstraint Layout ĊĠĠĠ Ġprivate Ġval Ġanimation Duration : ĠLong Ġ= Ġ 1 5 0 ĊĠĠĠ Ġprivate Ġval Ġconstraint Set 1 Ġ= ĠConstraint Set () ĊĠĠĠ Ġprivate Ġval Ġconstraint Set 2 Ġ= ĠConstraint Set () ĊĊĠĠĠ Ġvar Ġfab Text Visibility : ĠInt Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġset ( visibility ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġconstraint : ĠConstraint Set Ġ= Ġconstraint Set 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Ġ= Ġconstraint Set 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ== ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Ġ= Ġconstraint Set 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Transition Ġ= ĠChange Bounds () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Transition . duration Ġ= Ġanimation Duration ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition Manager . begin Delayed Transition ( this , Ġmy Transition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . apply To ( constraint Layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvisibility ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . mut ative _ fab _ layout , Ġthis ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView Ġ= ĠfindViewById ( R . id . image ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView Ġ= ĠfindViewById ( R . id . card _ textView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Layout Ġ= ĠfindViewById ( R . id . constraint _ Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set 1 . clone ( constraint Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set 2 . clone ( context , ĠR . layout . mut ative _ fab _ layout _ alt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġattribute Set ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Attribute Set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Attribute Set ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array : ĠTyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Mut ative Fab ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! typed Array . hasValue ( R . style able . Mut ative Fab _ fab Icon )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" missing Ġattribute Ġfab Icon ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! typed Array . hasValue ( R . style able . Mut ative Fab _ fab Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" missing Ġattribute Ġfab Text ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġimage Res Id : ĠInt Ġ= Ġtyped Array . getResource Id ( R . style able . Mut ative Fab _ fab Icon , ĠR . drawable . ic _ add ) ĊĠĠĠĠĠĠĠ Ġval Ġfab Text Ġ= Ġtyped Array . getString ( R . style able . Mut ative Fab _ fab Text ) ĊĠĠĠĠĠĠĠ Ġval Ġfab Text Visibility Ġ= Ġtyped Array . getInt ( R . style able . Mut ative Fab _ fab Text Visibility , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġfab TextColor Ġ= Ġtyped Array . getColor ( R . style able . Mut ative Fab _ fab TextColor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( context , Ġandroid . R . color . white )) ĊĠĠĠĠĠĠĠ Ġval Ġfab BackgroundColor : ĠInt Ġ= Ġtyped Array . getColor ( R . style able . Mut ative Fab _ fab BackgroundColor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( context , ĠR . color . color Accent )) ĊĠĠĠĠĠĠĠ Ġset Fab Icon ( image Res Id ) ĊĠĠĠĠĠĠĠ Ġset Fab Text ( fab Text ) ĊĠĠĠĠĠĠĠ Ġthis . fab Text Visibility Ġ= Ġfab Text Visibility ĊĠĠĠĠĠĠĠ Ġset Fab BackgroundColor ( fab BackgroundColor ) ĊĠĠĠĠĠĠĠ Ġset Fab TextColor ( fab TextColor ) ĊĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fab Icon ( res Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠimageView . setImage Resource ( res Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fab Text ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fab TextColor (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView . setTextColor ( color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fab BackgroundColor (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( constraint Layout . background Ġis ĠLayer Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( constraint Layout . background Ġas ĠLayer Drawable ). find Drawable By Layer Id ( R . id . fab _ shape )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutate (). setColor Filter ( color , ĠPort er D uff . Mode . SRC _ AT OP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Layout . background . mutate (). setColor Filter ( color , ĠPort er D uff . Mode . SRC _ AT OP ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fab Type face ( type face : ĠType face ){ ĊĠĠĠĠĠĠĠ ĠtextView . type face Ġ= Ġtype face ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ