Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何循环MotionLayout动画?_Java_Android_Android Motionlayout - Fatal编程技术网

Java 如何循环MotionLayout动画?

Java 如何循环MotionLayout动画?,java,android,android-motionlayout,Java,Android,Android Motionlayout,我正在试用MotionLayout,据我所知,它似乎用于从点A过渡到B是否存在从a到B并重新启动的循环属性? 我还没试过什么。只是在编写代码之前做研究。不 您可以在转换A->B,B->C&C->A中使用3种状态(A,B&C)来实现它。 将它们全部设置为autoTransition=“animateToEnd” 它可能适用于两种转换A->B和B->A设置B->A自动转换=“jumpToEnd” 让动画永远在屏幕上循环通常是不好的。 如果您只需要重复X次,请考虑键区或KimTimeCyes。< /P

我正在试用
MotionLayout
,据我所知,它似乎用于从点
A
过渡到
B
是否存在从
a
B
并重新启动的循环属性?

我还没试过什么。只是在编写代码之前做研究。

不 您可以在转换A->B,B->C&C->A中使用3种状态(A,B&C)来实现它。 将它们全部设置为autoTransition=“animateToEnd”

它可能适用于两种转换A->B和B->A设置B->A自动转换=“jumpToEnd”

让动画永远在屏幕上循环通常是不好的。 如果您只需要重复X次,请考虑键区或KimTimeCyes。< /P> (有关主题的短片: )否 您可以在转换A->B,B->C&C->A中使用3种状态(A,B&C)来实现它。 将它们全部设置为autoTransition=“animateToEnd”

它可能适用于两种转换A->B和B->A设置B->A自动转换=“jumpToEnd”

让动画永远在屏幕上循环通常是不好的。 如果您只需要重复X次,请考虑键区或KimTimeCyes。< /P> (有关主题的短片: )

提供的答案与此类似,但我想要简单的答案

这是我的方法:

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)
            {

            }
        }); 
其中
循环
false开始。在
onTransitionCompleted
的第一次触发时,它会快速抖动,因为它试图同时从开始到结束和从结束到开始(别问我为什么,它就是这样)。但是,它工作得很好,因为我想要它的目的几乎不明显。

提供的答案也有类似之处,但我想要简单的东西

这是我的方法:

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)
            {

            }
        }); 

其中
循环
false开始。在
onTransitionCompleted
的第一次触发时,它会快速抖动,因为它试图同时从开始到结束和从结束到开始(别问我为什么,它就是这样)。但是,它工作得很好,因为我想要它的目的几乎看不出来。

是的,我想过类似的事情。我想再检查一下是否有更合适的,是的,我也想过类似的事情。想要再次检查是否有更合适的东西,是的,这是一个很好的代码解决方案。作为一个小的改进,我建议使用TransitionAdapter,因为您只需要实现一个方法。我肯定会对此进行研究。谢谢我对你的答案投了赞成票,因为它确实让我对我可以探索的其他领域有了一些见解。是的,这是一个很好的代码解决方案。作为一个小的改进,我建议使用TransitionAdapter,因为您只需要实现一个方法。我肯定会对此进行研究。谢谢我对你的答案投了赞成票,因为它确实让我对我可以探索的其他领域有了一些见解。