2014-12-12 1 views
0

Есть ли способ получить анимацию fade-in/-out на фоне прямоугольника canvas в киви? Я попробовал это, используя функцию Clock.schedule_interval(). Но возникли некоторые проблемы, связанные с параллелизмом и повышением данных.Kivy Fade-In Animation

Один из моих попыток выглядит следующим образом:

def calendarClicked(self, *args): 
    self.alpha = 1.0 
    self.alphaDelta = 0.01 

    self.root.canvas.add(Color(1,0,0,self.alpha)) 
    self.root.canvas.add(Rectangle(size=self.root.size)) 

    def fadeIn(self, dt): 

     self.alpha -= self.alphaDelta 
     self.root.canvas.add(Color(1,0,0,self.alpha)) 
     self.root.canvas.add(Rectangle(size=self.root.size)) 

     return self.alpha >= 0.5 

    Clock.schedule_interval(partial(fadeIn, self), 0.1) 

Другая идея состояла в том, чтобы использовать kivy.animation. Но я не могу найти способ изменить цвет вместо положения объекта/виджета.

Заранее благодарен!

ответ

2

Вы можете использовать инструкции на холсте Animation так же, как и виджет. Проблема в том, что вы вообще не изменяете инструкции по холсту, вы просто добавляете все больше и больше инструкций по холсту. Вам нужно добавить инструкции только один раз, а затем обновить значения через Animation.

def calendarClicked(self, *args): 
    if not hasattr(self, 'color'): 
     with self.root.canvas: 
      self.color = Color(1, 0, 0, 0) 
      self.rect = Rectangle(size=self.root.size) 

    self.color.a = 0 
    anim = Animation(a=1.0) 
    anim.start(self.color)