2016-09-09 2 views
2

Я пытаюсь повторить свою анимацию, я хочу, чтобы моя кнопка переходила от середины экрана к краю ширины и возвращалась к другому краю ширины, до сих пор я получил это.Как создать и повторить анимацию на формах Xamarin

var exitRight = new Animation(callback: d => lab.TranslationX = d, 
             start: 0, 
             end: width, 
             easing: Easing.Linear); 

     var enterLeft = new Animation(callback: d => lab.TranslationX = d, 
             start: width, 
             end: -width, 
             easing: Easing.Linear); 

     storyboard.Add(0, 0.5, exitRight); 
     storyboard.Add(0.5, 1, enterLeft); 

     storyboard.Commit(lab, "lab", length: 5000,repeat:()=> true); 

Проблема в том, что он не возвращает, он пересекает экран и вернуться с другой стороны, и не повторяется, даже если я передать Func Paramenter.

ответ

2

Взятые из here !

Запуск анимации, созданные с помощью класса анимации, которые могут включать или не включать дочерние анимации, достигается путем вызова метода Commit. Этот метод определяет продолжительность анимации, а также другие элементы, - обратный вызов, который контролирует, следует ли повторять анимацию.

Позже пост:

Следующие аргументы указаны в методе Commit: [...] - Седьмой аргумент (повтор) является функцией обратного вызова, которая позволяет анимации повторяться. Он вызывается в конце анимации, и возвращение true указывает, что анимация должна быть повторена.

Чтобы получить пример работает, я предполагаю, что вам действительно нужно все параметров.

Надеюсь, вам это поможет!

+0

спасибо, это помогает мне! –

2

У меня была проблема с кнопкой масштабирования вверх & вниз с двумя отдельными анимациями, вызывать после конца, анимированное свойство возвращается к начальному значению, что заставило кнопку img мерцать в этот момент. Решение состоит в том, чтобы поставить другую анимацию внутри функции обратного вызова, когда значение свойства достигает своей границы

var animationDownSize = new Animation 
(
    callback: e => { 
         infoImageBtn.Scale = e; 
         if (e == 0.75) 
         { 
          var animationUpSize = new Animation 
          (
           callback: d => infoImageBtn.Scale = d, 
           start: infoImageBtn.Scale, 
           end: infoImageBtn.Scale = 1, 
           easing: Easing.SinInOut 
          ); 
          animationUpSize.Commit(infoImageBtn, "UpSize", length: 500); 
         } 
        }, 
    start: infoImageBtn.Scale, 
    end: infoImageBtn.Scale = 0.75, 
    easing: Easing.SinInOut 
); 
animationDownSize.Commit(infoImageBtn, "DownSize", length: 500); 
Смежные вопросы