package Ġorg . tok end . template . view . util Ċ Ċ import Ġandroid . support . design . widget . AppBar Layout Ċ import Ġandroid . support . v 4 . widget . Nested ScrollView Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . View Ċ Ċ object ĠE levation Util Ġ{ ĊĊĠĠĠ Ġfun Ġinit Scroll Elevation ( scroll View : ĠNested ScrollView , Ġelevation View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelevation View . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġwas In Scroll Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġanimation Duration Ġ= Ġscroll View . context . resources . getInteger ( android . R . integer . config _ short Anim Time ). to Long () ĊĊĠĠĠĠĠĠĠ Ġscroll View . setOn Scroll ChangeListener Ġ{ Ġ_: ĠNested ScrollView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_: ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Y : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_: ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_: ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin Scroll Ġ= Ġscroll Y Ġ> Ġ 0 . 0 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in Scroll Ġ!= Ġwas In Scroll ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in Scroll ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Util . fadeIn View ( elevation View , Ġanimation Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Util . fadeOut View ( elevation View , Ġanimation Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwas In Scroll Ġ= Ġin Scroll ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Scroll Elevation ( re cyclerView : ĠRecyclerView , Ġelevation View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelevation View . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġon Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġanimation Duration Ġ= Ġre cyclerView . context . resources . getInteger ( android . R . integer . config _ short Anim Time ). to Long () ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dy Ġ<= Ġ 0 Ġ&& Ġ! re cyclerView . can Scroll Vert ically (- 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Util . fadeOut View ( elevation View , Ġanimation Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( dy Ġ> Ġ 0 Ġ&& Ġon Top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Util . fadeIn View ( elevation View , Ġanimation Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Top Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Scroll Elevation ( moving App bar : ĠApp Bar Layout , Ġelevation View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelevation View . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġon Zero Offset Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġanimation Duration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoving App bar . context . resources . getInteger ( android . R . integer . config _ short Anim Time ). to Long () ĊĊĠĠĠĠĠĠĠ Ġmoving App bar . add On Offset Changed Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Bar Layout . On Offset Changed Listener Ġ{ Ġ_, Ġvertical Offset Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vertical Offset Ġ< Ġ 0 Ġ&& Ġon Zero Offset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Util . fadeIn View ( elevation View , Ġanimation Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Zero Offset Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( vertical Offset Ġ== Ġ 0 Ġ&& Ġ! on Zero Offset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Util . fadeOut View ( elevation View , Ġanimation Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Zero Offset Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }