oligazar
6/6/2017 - 3:41 PM

Animate Toolbar's height or Y position

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()
            }
        }
    }