Animate Toolbar's height or Y position
// https://stackoverflow.com/a/33936853/4656400
// var 1. Animates toolbar height
var mToolbarHeight: Int = 0
var mAnimDuration = 300 /* milliseconds */
var mVaActionBar: ValueAnimator? = null
fun hideActionBar() {
// initialize `mToolbarHeight`
if (mToolbarHeight == 0) mToolbarHeight = toolbar.height
if (mVaActionBar != null && mVaActionBar!!.isRunning) return
// animate `Toolbar's` height to zero.
mVaActionBar = ValueAnimator.ofInt(mToolbarHeight, 0)
mVaActionBar!!.addUpdateListener { animation ->
// update LayoutParams
(toolbar.layoutParams as AppBarLayout.LayoutParams).height = animation.animatedValue as Int
toolbar.requestLayout()
}
mVaActionBar!!.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
super.onAnimationEnd(animation)
supportActionBar?.hide()
}
})
mVaActionBar!!.duration = mAnimDuration.toLong()
mVaActionBar!!.start()
}
fun showActionBar() {
if (mVaActionBar != null && mVaActionBar!!.isRunning) {
// we are already animating a transition - block here
return
}
// restore `Toolbar's` height
mVaActionBar = ValueAnimator.ofInt(0, mToolbarHeight)
mVaActionBar!!.addUpdateListener { animation ->
// update LayoutParams
(toolbar.layoutParams as AppBarLayout.LayoutParams).height = animation.animatedValue as Int
toolbar.requestLayout()
}
mVaActionBar!!.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator) {
super.onAnimationStart(animation)
supportActionBar?.show()
}
})
mVaActionBar!!.duration = mAnimDuration.toLong()
mVaActionBar!!.start()
}
// var 2. Animated toolbar Y position
fun hideActionBar() {
val ab = supportActionBar
if (ab != null && ab.isShowing) {
if (appBar != null) {
appBar.animate().translationY(-appBar.height.toFloat()).setDuration(200L)
.withEndAction({ ab.hide() }).start()
} else ab.hide()
}
}
fun showActionBar() {
val ab = supportActionBar
if (ab != null && !ab.isShowing) {
ab.show()
if (appBar != null) {
appBar.animate().translationY(0f).setDuration(200L).start()
}
}
}