Kivy自定义动画功能



有没有办法组合各种内置的动画函数,甚至创建自定义函数?

我喜欢in_out_cubicin_out_quadin_out_sine功能,但我想做一些类似in_cubic_out_sine的东西,看看它是否可以。

尝试其他数学函数来创建各种效果也很有趣。

如何在基维做到这一点?

你指出的可能有几种解释,所以我将向你展示不同的可能性:

  • 使用从 p1 到 p2 的in_cubic动画,从 p2 到终点 p3out_sine

    from kivy.animation import Animation
    from kivy.app import App
    from kivy.uix.button import Button
    class TestApp(App):
    def animate(self, instance):
    animation = Animation(pos=(200, 200), t='in_cubic')
    animation += Animation(pos=(400, 400), t='out_sine')
    animation.start(instance)
    def build(self):
    button = Button(size_hint=(None, None), text='plop',
    on_press=self.animate)
    return button
    if __name__ == '__main__':
    TestApp().run()
    
  • 在 50% 的预in_cubic和其他out_sine中应用,为此我们创建一个新功能:

    from kivy.animation import Animation, AnimationTransition
    from kivy.app import App
    from kivy.uix.button import Button
    
    def in_cubic_out_sine(progress):
    return AnimationTransition.in_cubic(progress) if progress < 0.5 else AnimationTransition.out_sine(progress)
    class TestApp(App):
    def animate(self, instance):
    animation = Animation(pos=(200, 200), t=in_cubic_out_sine)
    animation.start(instance)
    def build(self):
    button = Button(size_hint=(None, None), text='plop',
    on_press=self.animate)
    return button
    if __name__ == '__main__':
    TestApp().run()
    

一般来说,你可以实现自己的函数,唯一要记住的是,进度需要从 0 到 1 的值:

from kivy.animation import Animation
from kivy.app import App
from kivy.uix.button import Button
from math import cos, sin, pi, exp
def custom_animation(progress):
return 1 - exp(-progress**2)*cos(progress*pi)**3
class TestApp(App):
def animate(self, instance):
animation = Animation(pos=(200, 200), t=custom_animation)
animation.start(instance)
def build(self):
button = Button(size_hint=(None, None), text='plop',
on_press=self.animate)
return button
if __name__ == '__main__':
TestApp().run()

最新更新