如何在不同的屏幕中更改屏幕过渡

Posted

技术标签:

【中文标题】如何在不同的屏幕中更改屏幕过渡【英文标题】:How to change screen transition in different screens 【发布时间】:2016-06-09 04:24:43 【问题描述】:

我有两个屏幕。当我按下“下一个屏幕”按钮时,它将转到第二个屏幕,并且过渡应该是 SlideTransition(左),当我按下“返回”按钮时,它应该返回到第一个屏幕,并且过渡应该是 SlideTransition(右)。

怎么做?它只在我的代码中使用了 1 个转换

这是我的代码 py/kv 代码:

class 1stScreen(Screen):
    ...some methods...

class 2ndScreen(Screen):
    ...some methods...

class MyScreenManager(ScreenManager):
    pass

root_widget = Builder.load_string('''
#:import SlideTransition kivy.uix.screenmanager.SlideTransition

MyScreenManager:
    transition: SlideTransition(direction='left')
    1stScreen:

    transition: SlideTransition(direction='right') #<-- Im getting error with this
    2ndScreen:

<1stScreen>:
     name: '1stScreen'
     ...some widgets...
     Button:
         text: 'next screen'
         on_release: app.root.current = '2ndScreen'

<2ndScreen>:
     name: '2ndScreen'
     ...some widgets...
     Button:
         text: 'back'
         on_release: app.root.current = '1stScreen'
''')

class Main(App):
    def build(self):
        return root_widget

if __name__ == "__main__":
    Main().run()

【问题讨论】:

【参考方案1】:

将转换放入on_release 事件中。

Button:
    text: 'next screen'
    on_release:
        app.root.transition = SlideTransition(direction='right')
        app.root.current = '2ndScreen'
...

【讨论】:

【参考方案2】:

对于其他来这里寻找使用完全不同的过渡从一个屏幕到另一个屏幕的答案的人来说,这对我有用:

    在 KV 文件的顶部加载所需的转换,如下所示(包括哈希):
#: import FadeTransition kivy.uix.screenmanager.FadeTransition
#: import SlideTransition kivy.uix.screenmanager.SlideTransition
    玩转这种格式,将过渡类型更改为所需的类型:
app.root.transition = FadeTransition(duration=1.2)

保持它与您的触发事件相关联。我试过了

on_release

我的登录和注销按钮,但发现它有问题,不完全是我想要的行为。我最终为

添加了一行
on_press

为了在没有意外行为的情况下创建所需的过渡。我将更改屏幕的实际行保留在

on_release

行。

【讨论】:

以上是关于如何在不同的屏幕中更改屏幕过渡的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 popToRootViewController 的过渡样式?

Xcode Storyboard - 如何在不同的 iPhone 屏幕尺寸之间更改元素的字体大小和位置

如何捕获用于过渡的屏幕截图

如何使用引导程序更改导航栏中的过渡动画?

如何在 Xcode 的另一个屏幕上完成某个操作时更改按钮的状态?

如何在 Flutter 中移除原生闪屏和主屏幕之间的默认淡入淡出过渡? (仅使用本机启动画面)