Расширенная анимация открытия и закрытия кнопки - PullRequest
0 голосов
/ 11 мая 2019

Анимация, которую я сейчас использую для открытия и закрытия кнопки, это просто дополнительная кнопка, которая выходит из основной кнопки и расширяется с помощью 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...