我的运动布局与此布局描述:app:layoutDescription="@xml/scene"
scene.xml
<MotionScene
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetStart="@layout/view_home_card_start"
motion:constraintSetEnd="@layout/view_home_card_end"
motion:duration="1000">
<OnSwipe
motion:touchAnchorId="@+id/button"
motion:touchAnchorSide="left"
motion:dragDirection="dragLeft" />
</Transition>
</MotionScene>
我认为view_home_card_start
和view_home_card_end
的xml是不相关的。
如何以编程方式调用此动画?
答案 0 :(得分:9)
最后我要这样做:
((MotionLayout)findViewById(R.id.motionLayout)).transitionToEnd();
((MotionLayout)findViewById(R.id.motionLayout)).transitionToStart();
答案 1 :(得分:8)
您也可以在xml中使用
motion:autoTransition="animateToEnd"
和
motion:autoTransition="animateToStart"
答案 2 :(得分:3)
如果有人从片段中这样做:
导入:
import androidx.constraintlayout.motion.widget.MotionLayout;
实例化MotionLayout:
MotionLayout motionLayout = view.findViewById(R.id.your_motion_layout);
过渡到运动的结束/开始:
motionLayout.transitionToStart();
或
motionLayout.transitionToEnd();
答案 3 :(得分:0)
In Latest Update of Constraint **2.0.0-beta1** Layout There are Public methods add in motion layout
you can get these methods with the help of motionlayout id
**motionLayout**
1. public void setProgress (float pos)
2. public void setTransition (int
beginId,int endId)
3. public void setTransitionDuration (int
milliseconds) public void setTransitionListener
(MotionLayout.TransitionListener listener)
4. public void setState (int
id,int screenWidth,
int screenHeight)
5. if(wantShowUi)
{
newUserActivityBinding.coordinatorLayout.transitionToStart();
}
else
{
newUserActivityBinding.coordinatorLayout.transitionToEnd();
}
<android.support.constraint.motion.MotionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/motionLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/motion_scene_01"
tools:showPaths="true">
<View
android:id="@+id/button"
android:background="@color/colorAccent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:soundEffectsEnabled="false"
tools:layout_editor_absoluteY="361dp"
tools:layout_editor_absoluteX="61dp"/>
</android.support.constraint.motion.MotionLayout>
答案 4 :(得分:-1)
我们可以这样做 motion_layout.transitionToEnd()
但是在恢复Activity时,它将以如此快的速度启动动画,以至于我们可能会错过一些动画或整个动画。所以我建议增加一些延迟。
GlobalScope.launch (Dispatchers.IO){
delay(1000)
withContext(Dispatchers.Main){
motion_layout.transitionToEnd()
}
}
如果没有添加,则还需要添加协程依赖。
实现'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'