2016-11-30 5 views
0

Я пытаюсь анимировать изображение в Xamarin.Forms (версия 2.3.3.168). Анимация работает, но она не повторяется.Xamarin формы анимация не повторяется

public class WelcomePage : ContentPage 
{ 
    Image img; 

    public WelcomePage() 
    { 
     img = new Image 
     { 
      Source = "img.png", 
      HorizontalOptions = LayoutOptions.Center, 
      VerticalOptions = LayoutOptions.Center, 
     }; 

     Content = new StackLayout 
     { 
      VerticalOptions = LayoutOptions.Center, 
      Children = { 
       img 
      } 
     }; 
    } 

    protected override void OnAppearing() 
    { 
     base.OnAppearing(); 

     var a = new Animation(); 
     a.Add(0, 0.5, new Animation((v) => 
     { 
      img.Scale = v; 
     }, 1.0, 1.2, Easing.CubicInOut,() => { System.Diagnostics.Debug.WriteLine("ANIMATION A"); })); 
     a.Add(0.5, 1, new Animation((v) => 
     { 
      img.Scale = v; 
     }, 1.2, 1.0, Easing.CubicInOut,() => { System.Diagnostics.Debug.WriteLine("ANIMATION B"); })); 
     a.Commit(img, "animation", 16, 2000, Easing.Linear, (d, f) => img.Scale = 1.0,() => 
     { 
      System.Diagnostics.Debug.WriteLine("ANIMATION ALL"); 
      return true; 
     }); 
    } 
} 

После запуска приложения в течение нескольких секунд, следующий вывод отладки печатается:

ANIMATION A 
ANIMATION B 
ANIMATION ALL 
ANIMATION ALL 
ANIMATION ALL 

Я проверяю это как UWP.

ответ

1

Согласно this thread on the Xamarin forums, другие, похоже, имеют такую ​​же проблему. Кажется, это связано с частной собственностью, которая устанавливается в каждой из под-анимаций.

Чтобы обойти проблему, чтобы воссоздать цепочку анимации каждый раз, когда цепь завершает:

public class WelcomePage : ContentPage 
{ 
    Image img; 

    public WelcomePage() 
    { 
     img = new Image 
     { 
      Source = "circle_plus.png", 
      HorizontalOptions = LayoutOptions.Center, 
      VerticalOptions = LayoutOptions.Center, 
     }; 

     Content = new StackLayout 
     { 
      VerticalOptions = LayoutOptions.Center, 
      Children = { 
       img 
      } 
     }; 
    } 

    protected override void OnAppearing() 
    { 
     base.OnAppearing(); 
     animate(); 
    } 

    void animate() 
    { 
     var a = new Animation(); 
     a.Add(0, 0.5, new Animation((v) => 
     { 
      img.Scale = v; 
     }, 1.0, 1.2, Easing.CubicInOut,() => { System.Diagnostics.Debug.WriteLine("ANIMATION A"); })); 
     a.Add(0.5, 1, new Animation((v) => 
     { 
      img.Scale = v; 
     }, 1.2, 1.0, Easing.CubicInOut,() => { System.Diagnostics.Debug.WriteLine("ANIMATION B"); })); 
     a.Commit(img, "animation", 16, 2000, null, (d, f) => 
     { 
      img.Scale = 1.0; 
      System.Diagnostics.Debug.WriteLine("ANIMATION ALL"); 
      animate(); 
     }); 
    } 
} 
Смежные вопросы