kivyMD 中的旋转图像

A spinning image in kivyMD

我正在制作一个 phone 应用程序,它的中心应该有一个旋转的图像。所以我这样做了:

class MainScreen(Screen):
    pass
class SecondScreen(Screen):
    pass
class WindowManager(ScreenManager):
    pass

class MyApp(MDApp):

    def build(self):
        from threading import Timer
        Timer(3.0, self.rotate).start()
    def rotate(self):
        from time import sleep
        while True:
            while self.root.current == 'mainscreen':
                self.root.get_screen('mainscreen').ids.spin.angle -= 1
                sleep(0.01)

这是 .kv 文件:

'''
WindowManager:
    MainScreen:
    SecondScreen:
<IMG@Image>:
    angle: 45
    canvas.before:
        PushMatrix
        Rotate:
            angle: root.angle
            origin: self.center
    canvas.after:
        PopMatrix

<MainScreen>:
    name: 'mainscreen'

    MDBoxLayout:
        orientation: 'vertical'
        size: root.width, root.height

        MDToolbar:
            title: "My App"

        IMG:
            angle: 0
            id: spin
            source: 'file.png'
            allow_stretch: True

<SecondScreen>:
    name: 'secondscreen'
'''

函数rotate是为了使图像旋转。它确实有效,它一直在旋转,但每当我调整 window 的大小时它就会停止旋转。我不知道为什么会这样。有人可以告诉我该怎么做吗?如果有更好的方法让图像旋转我想知道。

您可以使用 Animation 通过动画 angle 来做到这一点。类似于:

class MyApp(MDApp):
    def build(self):
        self.stop_anim = False
        Clock.schedule_once(self.rotate)

    def rotate(self, *args):
        if self.stop_anim:
            return
        spinner = self.root.get_screen('mainscreen').ids.spin
        spinner.angle = 0
        self.anim = Animation(angle=360)
        self.anim.bind(on_complete=self.rotate)
        self.anim.start(spinner)