4

我对 MotionLayout 有 2 种不同的行为。这个想法是根据应用程序状态更改它们。但是当我从代码中设置时:

if(smth) {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_1)
} else {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_2)
}

不应用约束。但它们是在拖动运动后应用的。是否有一些解决方法或者是因为 ConstraintLayout 2.0.0 alpha ?我在用着:

'com.android.support.constraint:constraint-layout:2.0.0-alpha2'
4

6 回答 6

2

我在 MotionScene 中有过渡。

<Transition
    motion:constraintSetStart="@id/start"
    motion:constraintSetEnd="@id/end"
    motion:duration="1000"
    motion:interpolator="linear">

“MotionLayout.loadLayoutDescription”后未设置初始约束。我补充说:

MotionLayout.setTransition(R.id.start, R.id.end)

并正确应用约束。

于 2018-11-21T07:03:56.073 回答
1

您必须在加载布局后设置事务。

        if(smth) {
            constraintToolbar.loadLayoutDescription(R.xml.layout_description_1)
            motionContainer.setTransition(R.id.start1 ,R.id.end1)

        } else {
            constraintToolbar.loadLayoutDescription(R.xml.layout_description_2)
            motionContainer.setTransition(R.id.start1, R.id.end1)
        }
于 2019-06-16T15:28:15.063 回答
1

有点解决方法,但确实有效

if(smth) {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_1)
   constraintToolbar.setTransition(R.id.start1, R.id.end1)
} else {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_2)
   constraintToolbar.setTransition(R.id.start2, R.id.end2)
}
于 2019-02-01T04:11:45.763 回答
0

打电话后

if(smth) {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_1)
} else {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_2)
}

调用motionLayout.requestlayout()以让新的 MotionScene 工作。

注意:<MotionScene .../> 中的第一个 <Transitoin .../> 可以使用。

于 2021-06-03T02:08:16.820 回答
0

对我来说这有效

    doOnPreDraw {
        motionLayout.loadLayoutDescription(R.xml.scene)
    }
于 2021-12-24T22:28:01.757 回答
0

loadLayoutDescription我想只是使用androidx

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'

或者,如果您不使用 androidx,则必须将 constraintToolbar 更改为 motion

val motion = MotionLayout(this)

motion.loadLayoutDescription
于 2019-03-04T02:54:45.957 回答