如何循环 MotionLayout 动画?

How to Loop a MotionLayout Animation?

我正在试用 MotionLayout,据我了解,它似乎用于从点 AB 的过渡。 是否有从 AB 并重新开始的循环 属性?

我还没有尝试过任何东西。只是在实际编码之前做我的研究。

没有 您可以在转换 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)
            {

            }
        }); 

其中 loopedfalse 开头。它在 onTransitionCompleted 的第一个触发器上执行这种快速抖动,因为它试图同时从头到尾和从尾到头排序(不要问我为什么。它就是这样做的)。但是,它工作得很好,因为它几乎没有引起我的注意。