gpt4 book ai didi

android - MotionLayout setTransition() 总是调用 transitionToStart()

转载 作者:行者123 更新时间:2023-12-04 17:35:00 25 4
gpt4 key购买 nike

使用 MotionLayout,我需要暂时转换到加载状态 (ConstraintSet),我通过调用:

motionLayout.transitionToState(R.id.state_loading)

然后我想转换回在我的 MotionScene XML 中声明的默认 Transition:

motionLayout.transitionToState(R.id.state_expanded)

当我想通过设置 endState 调用来恢复默认行为时,问题就来了:

motionLayout.setTransition(R.id.state_expanded, R.id.state_collapsed)

这里的问题是 setTransition(int beginId, int endId)还调用 transitionToStart(),以一种奇怪的方式再次为其设置动画。

所以我的问题是,是否有任何方法可以在不调用 transitionToStart() 的情况下调用 setTransition()

最佳答案

我通过创建自定义 MotionLayout 找到了一种丑陋的方式来做到这一点,只是为了制作 setTransition(Transition transition)公共(public)方法(因为它是 protected 但它不会调用 transitionToStart()):

class CustomMotionLayout : MotionLayout {

constructor(context: Context) : super(context)

constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)

constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)

public override fun setTransition(transition: MotionScene.Transition) {
super.setTransition(transition)
}
}

然后通过 Id 检索您的 Transition 并将其传递给新的公共(public)方法:

val desiredTransition = customMotionLayout.getTransition(R.id.transition_default)
customMotionLayout.setTransition(desiredTransition)

这样,当以编程方式将 Transition 设置为 MotionLayout 时,它不会调用 transitionToStart()

关于android - MotionLayout setTransition() 总是调用 transitionToStart(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57008632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com