【问题标题】:How to Loop a MotionLayout Animation?如何循环播放 MotionLayout 动画?
【发布时间】:2021-05-06 14:47:04
【问题描述】:

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

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

【问题讨论】:

    标签: java android android-motionlayout


    【解决方案1】:

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

    【讨论】:

    • 是的,我想过类似的事情。想仔细检查是否有更合适的东西哈哈
    【解决方案2】:

    @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 的第一个触发器上进行这种快速抖动,因为它试图同时从头到尾以及从头到尾进行排序(不要问我为什么。它就是这样做的)。但是,它工作得很好,因为它对于我想要它的用途来说几乎不引人注目。

    【讨论】:

    • 是的,这是一个很好的代码解决方案。作为一个小改进,我建议您使用 TransitionAdapter,因为您只需实现一个方法。
    • 我一定会看看的。谢谢。我赞成您的回答,因为它确实让我对我可以探索的其他一些领域有所了解。
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多