我需要显示一些文字,然后再设置动画字体大小。文本不得超过其小部件的大小,因此我使用text_size: self.size
(我不介意在动画期间超出小部件大小的文本)
问题是字体大小的动画强制文本重新排序,这很丑陋(动画期间图像中的红色圆圈)
我希望 暂时超过这个尺寸。
如何实现不超过其小部件大小的文本,以及在字体大小的动画中超过该大小的文本(如下图所示)?
使用的代码:
from kivy.app import App
from kivy.uix.button import Button
from kivy.animation import Animation
from kivy.lang import Builder
kv = """
<MyWidget>:
text: 'long text...' * 5
text_size: self.size
halign: 'center'
valign: 'middle'
on_release: self.animate_function()
"""
Builder.load_string(kv)
class MyWidget(Button):
def animate_function(self):
initial_font_size = self.font_size
anim = Animation(font_size=initial_font_size * 1.5, duration=2)
anim += Animation(font_size=initial_font_size, duration=2)
anim.start(self)
class MyButtonsApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyButtonsApp().run()
答案 0 :(得分:2)
您可以为文本的拉伸设置动画,而不是其字体大小。这将略微不那么图形精确(如放大小图像看起来模糊),但可能足够好,具体取决于您的参数。它也会很多更高性能;动画字体大小需要每次重新渲染纹理。
我有一个非常简单的使用Scale指令的例子,您可以找到here。
答案 1 :(得分:0)
使用inclement建议的代码我最终得到以下代码,其行为与his answer中所述相同:
from kivy.app import App
from kivy.uix.button import Button
from kivy.animation import Animation
from kivy.lang import Builder
from kivy.properties import NumericProperty
kv = """
<MyWidget>:
text: 'long text...' * 5
text_size: self.size
halign: 'center'
valign: 'middle'
on_release: self.animate_function()
canvas.before:
PushMatrix:
Scale:
origin: self.x + 0.5*self.width, self.y + 0.5*self.height
x: self.scale
y: self.scale
canvas.after:
PopMatrix:
"""
Builder.load_string(kv)
class MyWidget(Button):
scale = NumericProperty(1)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.initial_scale = self.scale
def animate_function(self):
anim = Animation(scale=self.initial_scale * 1.2, duration=.1)
anim += Animation(scale=self.initial_scale, duration=.1)
anim.start(self)
class MyButtonsApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyButtonsApp().run()