如何循环 MotionLayout 动画?
How to Loop a MotionLayout Animation?
我正在试用 MotionLayout
,据我了解,它似乎用于从点 A
到 B
的过渡。 是否有从 A
到 B
并重新开始的循环 属性?
我还没有尝试过任何东西。只是在实际编码之前做我的研究。
没有
您可以在转换 A->B、B->C 和 C->A 中使用 3 种状态(A、B 和 C)来实现它。
将它们全部设置为 autoTransition="animateToEnd".
它可能适用于两个转换 A->B 和 B->A 设置 B->A autoTransition="jumpToEnd"。
让动画在屏幕上永远循环播放通常不好。
如果您只需要重复 X 次,请考虑使用 KeyCycles 或 KeyTimeCycles。
(主题短片:KeyCycle
KeyTimeCycle )
提供的答案@hoford做了类似的事情,但我想要一些简单的东西。
这是我的方法:
MotionLayout motionLayout = findViewById(R.id.motionLayout);
motionLayout.transitionToEnd();
motionLayout.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(!looped)
motionLayout.transitionToStart();
else
motionLayout.transitionToEnd();
looped = !looped;
}
@Override
public void onTransitionTrigger(MotionLayout motionLayout, int i, boolean b, float v)
{
}
});
其中 looped
以 false
开头。它在 onTransitionCompleted
的第一个触发器上执行这种快速抖动,因为它试图同时从头到尾和从尾到头排序(不要问我为什么。它就是这样做的)。但是,它工作得很好,因为它几乎没有引起我的注意。
我正在试用 MotionLayout
,据我了解,它似乎用于从点 A
到 B
的过渡。 是否有从 A
到 B
并重新开始的循环 属性?
我还没有尝试过任何东西。只是在实际编码之前做我的研究。
没有 您可以在转换 A->B、B->C 和 C->A 中使用 3 种状态(A、B 和 C)来实现它。 将它们全部设置为 autoTransition="animateToEnd".
它可能适用于两个转换 A->B 和 B->A 设置 B->A autoTransition="jumpToEnd"。
让动画在屏幕上永远循环播放通常不好。 如果您只需要重复 X 次,请考虑使用 KeyCycles 或 KeyTimeCycles。
(主题短片:KeyCycle KeyTimeCycle )
提供的答案@hoford做了类似的事情,但我想要一些简单的东西。
这是我的方法:
MotionLayout motionLayout = findViewById(R.id.motionLayout);
motionLayout.transitionToEnd();
motionLayout.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(!looped)
motionLayout.transitionToStart();
else
motionLayout.transitionToEnd();
looped = !looped;
}
@Override
public void onTransitionTrigger(MotionLayout motionLayout, int i, boolean b, float v)
{
}
});
其中 looped
以 false
开头。它在 onTransitionCompleted
的第一个触发器上执行这种快速抖动,因为它试图同时从头到尾和从尾到头排序(不要问我为什么。它就是这样做的)。但是,它工作得很好,因为它几乎没有引起我的注意。