Xamarin.Forms — анимация 2 вещей одновременно (анимация push-уведомлений)

У меня есть страница форм Xamarin, которая содержит абсолютный макет, обертывающий все. Внутри этого у меня есть контент, который заполняет все пространство и имеет левый отступ 80, а затем у меня есть левая боковая панель навигации шириной 80, расположенная поверх основного контента:

введите здесь описание изображения

Я хочу своего рода модифицированную анимацию "push", что означает выполнение двух вещей:

  1. Увеличьте ширину левой навигации на 100 (до 180)
  2. TranslateX основной контент на 100

(Обратите внимание, что использовать TranslateTo() было бы очень просто, но левая навигация должна увеличиваться по ширине, а не сдвигаться вправо, и нет метода WidthTo()).

Я могу сделать № 1 сам по себе очень хорошо.

Я могу сделать № 2 сам по себе очень хорошо.

Но я не могу заставить их обоих анимироваться. Если я сначала запускаю анимацию левой навигации (через .Commit()), анимируется только основной контент. Если я сначала запускаю анимацию основного контента, ни одна из них не анимируется. Странный! Что здесь происходит?

Вот основной код, который я использую:

var leftNavAnimation = new Animation(
    callback: x => leftNav.WidthRequest = x,
    start: 80,
    end: 180,
    easing: Easing.Linear
);

var mainContentAnimation = new Animation(
    callback: x => mainContent.TranslationX = x,
    start: 0,
    end: 100,
    easing: Easing.Linear
);

leftNavAnimation.Commit(this, "leftNavAnimationName", length: animationLength);
pageContentAnimation.Commit(this, "mainContentAnimationName", length: animationLength);

person jbyrd    schedule 06.05.2016    source источник


Ответы (1)


Я понял, что первый параметр .Commit() должен относиться к элементу, который вы анимируете. Итак, переход от:

mainContentAnimation.Commit(this, "mainContentAnimationName", length: animationLength);

To:

mainContentAnimation.Commit(mainContent, "mainContentAnimationName", length: animationLength);

Починил это.

person jbyrd    schedule 06.05.2016