以编程方式更改 MotionLayout 运动场景中的 ConstraintSet 属性
Programmatically change ConstraintSet attribute in motion scene of MotionLayout
我有一个用例,我想使用 MotionLayout 创建类似 Youtube 的动画。 this repo 中有此动画的示例。
但问题是,在这个例子中,他们使用静态高度作为这样的起始约束,即 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>
但我要求使用宽高比设置约束。对于静态宽高比,我可以像这样在 Constraint 中使用 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.So 我想根据视频设置不同的纵横比。我无法在 ConstraintSet
中找到以编程方式设置它的方法
我尝试了一种解决方法来设置 android:layout_height="wrap_content"
并以编程方式更改视图纵横比。但是没有效果,动画也没有正常播放。
如有任何解决方案或建议,我们将不胜感激。
您可以访问 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
}
我有一个用例,我想使用 MotionLayout 创建类似 Youtube 的动画。 this repo 中有此动画的示例。
但问题是,在这个例子中,他们使用静态高度作为这样的起始约束,即 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>
但我要求使用宽高比设置约束。对于静态宽高比,我可以像这样在 Constraint 中使用 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.So 我想根据视频设置不同的纵横比。我无法在 ConstraintSet
我尝试了一种解决方法来设置 android:layout_height="wrap_content"
并以编程方式更改视图纵横比。但是没有效果,动画也没有正常播放。
如有任何解决方案或建议,我们将不胜感激。
您可以访问 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
}