如何将运行动画定义在AndroidMotionLayout/MotionScene无限?
How to run animation defind in the Android MotionLayout/MotionScene infinitely?
我通过 Google 阅读了这份文档:Manage motion and widget animation with MotionLayout
我还阅读了一些文档,例如 Getting Started with the Motion Editor in Android Studio 4.0
问题是他们都在谈论当我们点击 View/Button 时如何启动动画。我想模拟加载动画,但我想在显示视图时自动启动动画。
我意识到我可以使用下面的代码 运行 动画。但是,问题是,transitionToEnd()
运行动画一次。
所以,我的问题是:
如何运行动画并将其放入循环中? (永远拥有它,直到我停止它。)
是否可以运行动画从startToEnd,然后endToStart,循环动画?
private fun displayDamLoadingAnimation() {
val view = layoutInflater.inflate(R.layout.viewgroup_dam_loading, binding.flDamContainer)
view.motionContainer.transitionToEnd()
}
这可能对用户不利 phone 但您可以做到。
一种方法是创建两个转换:
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:autoTransition="animateToEnd"
motion:duration="1000">
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:autoTransition="animateToStart"
motion:duration="1000">
但是如果你想让它循环不来回
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:autoTransition="animateToEnd"
motion:duration="1000">
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:autoTransition="jumpToStart"
/>
您可以以编程方式启动转换并使用转换侦听器来回重复它。不确定这是否是最有效的方法,但我没有找到任何其他方法
private void animateText(){
mMotionLayout.setTransitionListener(new MotionLayout.TransitionListener() {
@Override
public void onTransitionStarted(MotionLayout motionLayout, int i, int i1) {
}
@Override
public void onTransitionChange(MotionLayout motionLayout, int i, int i1, float v) {
}
@Override
public void onTransitionCompleted(MotionLayout motionLayout, int i) {
if (motionLayout.getCurrentState() == R.id.start){
animateText();
} else {
mMotionLayout.transitionToStart();
}
}
@Override
public void onTransitionTrigger(MotionLayout motionLayout, int i, boolean b, float v) {
}
});
mMotionLayout.transitionToEnd();
}
“技巧”是在转换完成后检查状态,transitionToStart()
或重新运行 函数
我通过 Google 阅读了这份文档:Manage motion and widget animation with MotionLayout 我还阅读了一些文档,例如 Getting Started with the Motion Editor in Android Studio 4.0
问题是他们都在谈论当我们点击 View/Button 时如何启动动画。我想模拟加载动画,但我想在显示视图时自动启动动画。
我意识到我可以使用下面的代码 运行 动画。但是,问题是,transitionToEnd()
运行动画一次。
所以,我的问题是:
如何运行动画并将其放入循环中? (永远拥有它,直到我停止它。)
是否可以运行动画从startToEnd,然后endToStart,循环动画?
private fun displayDamLoadingAnimation() {
val view = layoutInflater.inflate(R.layout.viewgroup_dam_loading, binding.flDamContainer)
view.motionContainer.transitionToEnd()
}
这可能对用户不利 phone 但您可以做到。 一种方法是创建两个转换:
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:autoTransition="animateToEnd"
motion:duration="1000">
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:autoTransition="animateToStart"
motion:duration="1000">
但是如果你想让它循环不来回
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:autoTransition="animateToEnd"
motion:duration="1000">
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:autoTransition="jumpToStart"
/>
您可以以编程方式启动转换并使用转换侦听器来回重复它。不确定这是否是最有效的方法,但我没有找到任何其他方法
private void animateText(){
mMotionLayout.setTransitionListener(new MotionLayout.TransitionListener() {
@Override
public void onTransitionStarted(MotionLayout motionLayout, int i, int i1) {
}
@Override
public void onTransitionChange(MotionLayout motionLayout, int i, int i1, float v) {
}
@Override
public void onTransitionCompleted(MotionLayout motionLayout, int i) {
if (motionLayout.getCurrentState() == R.id.start){
animateText();
} else {
mMotionLayout.transitionToStart();
}
}
@Override
public void onTransitionTrigger(MotionLayout motionLayout, int i, boolean b, float v) {
}
});
mMotionLayout.transitionToEnd();
}
“技巧”是在转换完成后检查状态,transitionToStart()
或重新运行 函数