У меня в приложении есть MotionLayout для перехода по смахиванию. В настоящее время я только что обновил с 2.0.0-alpha3
до 2.0.0-alpha4
релиз, и некоторые вещи не работают, как раньше.
Существует «myView», который представляет собой макет, который должен расширяться от нижней части экрана до представления заголовка. У этого есть ограничение сверху Руководства, которым я должен управлять программно (основанный на некоторых пользовательских действиях).
Других изменений в коде не было, поэтому при переходе на alpha3 все работает так, как ожидалось.
Код довольно простой:
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetEnd="@id/end"
motion:constraintSetStart="@id/start"
motion:duration="1000"
motion:interpolator="linear">
<!-- I used motion:motionInterpolator="linear" for alpha4-->
<OnSwipe
motion:dragDirection="dragUp"
motion:touchAnchorId="@id/myView"
motion:touchAnchorSide="top" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@id/myView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="@id/myGuideline" />
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@id/myView"
android:layout_width="match_parent"
android:layout_height="0dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toBottomOf="@id/someHeaderView" />
</ConstraintSet>
</MotionScene>
Проблема в том, что в выпуске alpha3 я мог использовать что-то вроде этого (и это сработало):
myMotionLayout.getConstraintSet(R.id.start)?.setGuidelinePercent(R.id.myGuideline, guidelinePercentage)
Теперь, когда я обновился до 2.0.0-alpha4
, это больше не работает, и я не могу понять, почему. Он всегда принимает значение по умолчанию из xml и никогда не изменяется, когда я пытаюсь сделать это динамически.
То, что я пытаюсь сделать, - это изменить начальную точку перехода на основе некоторых динамических данных (доступных в начале фрагмента или когда пользователь возвращается к нему). Если у вас есть лучшее представление о том, как я могу реализовать это с помощью MotionLayout, пожалуйста, дайте мне подсказку.
Реализация Gradle:
implementation "com.android.support.constraint:constraint-layout:2.0.0-alpha4"