StateListAnimator w / AppBarLayout

时间:2018-02-22 11:41:13

标签: android android-animation android-appbarlayout

将高程值应用于AppBarLayout时遇到问题。

我知道,应用常量高程值的代码看起来很简单:

stateListAnimator.addState(IntArray(0), ObjectAnimator.ofFloat(layoutAppBar, "elevation", someElevationValue))
layoutAppBar.stateListAnimator = stateListAnimator

所以我将此代码放在 layoutAppBar.addOnOffsetChangedListener 中并更新高程值:

val appBarElevationCurrent = (currentPercent * appBarElevationMax) / 100
stateListAnimator.addState(IntArray(0), ObjectAnimator.ofFloat(layoutAppBar, "elevation", appBarElevationCurrent))
layoutAppBar.stateListAnimator = stateListAnimator

在这种情况下,高程值不会改变。你有什么想法,我怎么能让它发挥作用。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

刚想通了,stateListAnimator的初始化

val stateListAnimator = StateListAnimator()

必须在侦听器内部。 完整的代码段:

 layoutAppBar.addOnOffsetChangedListener { _, verticalOffset ->
            val currentPercent = Math.abs(verticalOffset) * 100 / Math.abs(layoutAppBar.totalScrollRange + 1)
            val appBarElevationCurrent = (currentPercent * appBarElevationMax) / 100

            val stateListAnimator = StateListAnimator()
            stateListAnimator.addState(IntArray(0), ObjectAnimator.ofFloat(layoutAppBar, "elevation", appBarElevationCurrent))
            layoutAppBar.stateListAnimator = stateListAnimator
        }