将高程值应用于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
在这种情况下,高程值不会改变。你有什么想法,我怎么能让它发挥作用。
提前谢谢。
答案 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
}