我有一个用例,我想使用MotionLayout创建类似动画的Youtube。 this存储库中有此动画的示例。
但是问题在于,在此示例中,他们将静态高度用于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"
并以编程方式更改视图纵横比。但是它不起作用,动画不能正常工作。
任何解决方案或建议将不胜感激。
答案 0 :(得分:6)
您可以执行的操作是访问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
}