我正在尝试通过motionLayout实现一个简单的动画,目的是单击以移动图像,但是约束设置了arent允许重复的ID
<ConstraintSet android:id="@+id/starting_set">
<Constraint
android:id="@+id/tracker"
app:layout_constraintBottom_toBottomOf="@+id/t1"
tools:layout_editor_absoluteX="167dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
/>
</ConstraintSet>
重复约束的结束约束和约束ID(跟踪器)存在错误
答案 0 :(得分:0)
对于大多数拖动动画,您根本不需要重复。例如,在单击并拖动后将样本水平移动视图
<MotionScene
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetStart="@layout/motion_01_cl_start"
motion:constraintSetEnd="@layout/motion_01_cl_end"
motion:duration="1000">
<OnSwipe
motion:touchAnchorId="@+id/button"
motion:touchAnchorSide="right"
motion:dragDirection="dragRight" />
</Transition>
</MotionScene>
您可以在此处查找更多示例
https://github.com/googlesamples/android-ConstraintLayoutExamples
如果您有多个约束,请确保它们具有约束名称,并且它们位于不同的集合中。以下示例无法正常工作,并且会抱怨重复。如果您可以将Button设置为Constraint,那么它将起作用。
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="1000"
motion:motionInterpolator="linear">
<OnSwipe
motion:dragDirection="dragRight"
motion:touchAnchorId="@id/button"
motion:touchAnchorSide="right" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Button
android:id="@id/button"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginStart="8dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent">
<CustomAttribute
motion:attributeName="BackgroundColor"
motion:customColorValue="#D81B60" />
</Button>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Button
android:id="@id/button"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginEnd="8dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintTop_toTopOf="parent">
<CustomAttribute
motion:attributeName="BackgroundColor"
motion:customColorValue="#9999FF" />
</Button>
</ConstraintSet>
答案 1 :(得分:0)
@Yarh答案是正确的。这是我的案例的简短版本:我不小心将代码从layout-xml复制到了场景文件中。但是我忘了将xml标记更改为Constraint
。这样做可以消除有关DuplicateIds的错误。