在 Kotlin 中立即将 "ImageView" 移动到另一个位置(没有动画)?

Move "ImageView" instantly to another position (Without Animation) in Kotlin?

我已经用谷歌搜索了几个小时,以尽可能最有效的方式(所有设备都支持)但没有用:

我有一个包含在 ConstraintLayout 中的 ImageView,因此它没有绝对坐标,它会根据设备屏幕的宽度移动。

我想做的是将它移动到 dp 单位而不是像素的新位置。 (所以我确保它在所有设备上都具有视觉兼容性)

例如,立即将 ImageView 向左移动 10 dp。

我不需要动画,我只需要即时翻译。我找到的所有答案都包括动画,但我只希望它尽可能快,其他答案以像素为单位给出解决方案。

我正在使用 Kotlin。我目前没有任何代码可以正确执行任何操作。

我相信您需要手动更新 ConstraintLayout。 不知道大家怎么看,我就举个例子吧。

在XML中,我们有图像视图的初始位置(假设它的父级是一个约束布局):

 android:id="@+id/image_view"
 app:layout_constraintRight_toRightOf="parent"
 app:layout_constraintTop_toTopOf="parent"
 app:layout_marginRight="20dp"

当涉及到移动图像视图时,您将手动更新约束,在本例中为右边距(将其向左移动):

val constraintLayout: ConstraintLayout = findViewById(R.id.constraint_layout)
val constraintSet = ConstraintSet()
constraintSet.clone(constraintLayout)
constraintSet.clear(R.id.image_view, ConstraintSet.RIGHT);
constraintSet.connect(R.id.image_view, ConstraintSet.RIGHT, R.id.constraint_layout, ConstraintSet.RIGHT, 40)
constraintSet.applyTo(constraintLayout)

更新约束似乎有点冗长,但不幸的是它们就是这样工作的(您复制或创建一组全新的约束并将其应用于视图)。

在此示例中,您将右边距从 20dp 更改为 40dp,立即将图像视图向右移动 20dp 而没有动画。