Программно изменить атрибут ConstraintSet в сцене движения MotionLayout - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть сценарий использования, когда я хочу создать анимацию, похожую на Youtube, используя MotionLayout.Для этой анимации есть пример в этом репо.Но проблема в том, что в этом примере они используют статическую высоту для запуска ограничения, как это, которое составляет 320dp:

<MotionScene...>

    <Transition..>

        <OnSwipe... />

        <ConstraintSet android:id="@id/start">

            <Constraint
                android:id="@id/top_image_container"
                android:layout_width="0dp"
                android:layout_height="320dp"
                motion:layout_constraintTop_toTopOf="parent"
                motion:layout_constraintStart_toStartOf="parent"
                motion:layout_constraintEnd_toEndOf="parent"  />

      </ConstraintSet>
  </Transition>
</MotionScene>

Но мое требование установить ограничение, используя соотношение сторон.Для статического соотношения сторон, я могу установить, используя app:layout_constraintDimensionRatio="w,16:9" в Ограничении, как это.

<Constraint
    android:id="@id/top_image_container"
    android:layout_width="0dp"
    android:layout_height="0dp"
    motion:layout_constraintTop_toTopOf="w,16:9"
    motion:layout_constraintTop_toTopOf="parent"
    motion:layout_constraintStart_toStartOf="parent"
    motion:layout_constraintEnd_toEndOf="parent"  />

Но у каждого видео есть разное соотношение сторон, которое я получаю из API. Поэтому я хочу установить разные соотношения сторон в зависимостина видео.Я не могу найти способ установить это программно в ConstraintSet

Я попытался обойти, чтобы установить android:layout_height="wrap_content" и изменить соотношение сторон вида программно.Но это не сработало, и анимация не работала должным образом.

Любое решение или предложение будет оценено.

1 Ответ

0 голосов
/ 26 февраля 2019

Что вы можете сделать, это получить доступ к ConstraintSet, а затем установить соотношение:

motionLayout.getConstraintSet(R.id.start)?.let { startConstraintSet ->
    val ratio = imageView.calculateRatio()
    startConstraintSet.setDimensionRatio(R.id.top_image_container, ratio)
    // You can set the width and height here as well
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...