Анимация, которую я сейчас использую для открытия и закрытия кнопки, это просто дополнительная кнопка, которая выходит из основной кнопки и расширяется с помощью size_hint. Эта анимация просто увеличивает подслой. Я хотел бы «раскрыть» подслой вместо этого. Под этим я подразумеваю не связываться с size_hint в сабвуфере, и вместо того, чтобы расширяться, я хочу, чтобы он «раскрывался» сам, что делает анимацию намного чище. Вот ссылка на анимацию кнопки, которая использует тот же эффект. https://codemyui.com/button-to-a-list-animation/.
В связанной анимации нижняя граница опускается вниз и показывает список внизу, тот же эффект, который я хочу.
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import *
from kivy.animation import Animation
from kivy.lang.builder import Builder
from kivy.uix.behaviors import *
from kivy.properties import *
Builder.load_string("""
<Root>
Button1:
size_hint: 0.2,0.1
pos_hint: {'top':0.9,'center_x':0.5}
canvas:
Color:
rgba: [0.4,0.4,0.4,1]
Rectangle
size: self.size
pos: self.pos
SubLayout:
pos_hint: {'top':1,'center_x':0.5}
canvas:
Color:
rgba: [0.7,0.7,0.7,1]
Rectangle
size: self.size
pos: self.pos
Color:
rgba: [1,1,1,1]
Ellipse:
pos: self.pos
size: self.size
""")
class Root(FloatLayout):
pass
class Button1(ToggleButtonBehavior, FloatLayout):
def __init__(self,**kwargs):
super(Button1,self).__init__(**kwargs)
def on_state(self, *args):
if self.state == 'down':
anim = Animation(pos_hint={'top':0},d=0.2)
anim += Animation(size_hint=(2,2),d=0.2) #: expanding sublayout, how do I unveil instead?
anim.start(self.children[0])
else:
anim = Animation(size_hint=(1,1),d=0.2)
anim += Animation(pos_hint={'top':1},d=0.2)
anim.start(self.children[0])
class SubLayout(FloatLayout):
pass
class TestApp(App):
def build(self):
return Root()
if __name__ == '__main__':
TestApp().run()
Как вы можете видеть, SubLayout расширяется, и вы можете видеть внутри эллипс, расширяющийся с помощью кнопки. Я хотел бы, чтобы границы отодвинулись, открывая, что под ними, оставляя размер эллипса одинаковым, что является эффектом «раскрытия». Любые идеи о том, как это сделать, будут оценены. Может быть, что-то делать с Fbo?