是否可以组合各种内置动画功能甚至创建自定义功能? 我喜欢以下功能:
in_out_cubic,in_out_quad,in_out_sine
但是我想做类似的事情
in_cubic_out_sine
看看是否可以。
尝试其他数学函数来创建各种效果也很有趣。
这如何在Kivy中完成?
答案 0 :(得分:2)
您所指出的可能有几种解释,所以我将向您展示不同的可能性:
使用in_cubic
动画从p1到p2,以及out_sine
从p2到终点p3。
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()
应用进阶in_cubic的50%和其他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()