在重复运动场景时,我需要将旋转角度从30度更改为-30度。如何以编程方式执行此操作?
R.xml.scene_01:
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:motion="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Transition
motion:constraintSetStart="@id/start"
motion:constraintSetEnd="@id/end"
motion:duration="2000">
<KeyFrameSet>
<KeyAttribute
android:rotation="30"
motion:target="@id/button"
android:scaleX="1.3"
android:scaleY="1.3"
motion:framePosition="50"/>
</KeyFrameSet>
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@id/button"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@drawable/tut_ali_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@id/button"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@drawable/tut_ali_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
</MotionScene>
MotionLayout中的监听器:
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mMotionLayout.setTransitionListener(new MotionLayout.TransitionListener() {
@Override
public void onTransitionChange(MotionLayout motionLayout, int i, int i1, float v) {
}
@Override
public void onTransitionCompleted(MotionLayout motionLayout, int currentId) {
if(currentId == R.id.end){
motionLayout.loadLayoutDescription(R.xml.scene_02);
motionLayout.transitionToStart();
}else{
motionLayout.loadLayoutDescription(R.xml.scene_01);
motionLayout.transitionToEnd();
}
}
});
mMotionLayout.transitionToEnd();
}
我需要在onTransitionCompleted方法中更改旋转。作为一种选择,我可以使用各种KeyAttribute创建哪个KeyFrameSet吗?
在R.xml.scene_02中,我仅更改了 android:rotation =“-30” ,但 loadLayoutDescription 方法似乎无效。
我想得到的照片中的这样一个动作: enter image description here
答案 0 :(得分:0)
没有足够的代表评论,但是为什么要指定2个单独的转换?
尝试理解该问题,如果您希望它与该侦听器一致旋转,则应执行以下操作:
<Transition
motion:constraintSetEnd="@id/end"
motion:constraintSetStart="@id/start"
motion:duration="2000">
<KeyFrameSet>
<KeyAttribute
android:rotation="-45"
android:scaleX="2"
android:scaleY="2"
motion:framePosition="0"
motion:target="@id/button" />
<KeyAttribute
android:rotation="45"
android:scaleX="2"
android:scaleY="2"
motion:framePosition="50"
motion:target="@id/button" />
<KeyAttribute
android:rotation="-45"
android:scaleX="2"
android:scaleY="2"
motion:framePosition="100"
motion:target="@id/button" />
</KeyFrameSet>
</Transition>
按钮开始和结束时的旋转角度为-45度,在过渡过程中途旋转到45度。请注意,这些只是值动画,因此它们在到达起点或终点时将不会应用于对象-您需要在起点/终点ConstraintSet属性中指定旋转角度。