Фон анимируется с помощью ValueAnimator
и настраиваемого метода ValueAnimator.Update
. В действии onCreate
метод, с FragmentTransaction
вызовами первого фрагмента. И из первого фрагмента, еще один FragmetTranstaction
называется на основе щелчка кнопки пользователя. В первой транзакции все работает отлично, но во втором, переменные активности, используемые в ValueAnimator.Update
, имеют значение null. В чем проблема?FragmentTransaction вызов из другого фрагмента делает переменные активности нулями
активность onCreate
:
private const int TO_LEFT = 0;
private const int TO_RIGHT = 1;
private const long DURATION = 15000;
private int bgAnimDir = TO_LEFT;
private RectF mDisplayRect = new RectF();
private Matrix matrix = new Matrix();
private ValueAnimator bgAnimator;
[BindView(Resource.Id.background)]
ImageView background;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
Cheeseknife.Bind(this);
background.Post(() =>
{
animate();
});
fragmentTransaction = FragmentManager.BeginTransaction();
fragmentTransaction.Add(Resource.Id.home_container, new Home(), "Home");
fragmentTransaction.Commit();
}
Нулевая исключение указатель поднятый как для фона и матричных переменных
animate()
функция:
private void animate()
{
updateDisplayRect();
if (bgAnimDir == TO_LEFT)
animate(mDisplayRect.Left, mDisplayRect.Left - (mDisplayRect.Right - background.Width));
else
animate(mDisplayRect.Left, 0.0f);
}
private void animate(float from, float to)
{
bgAnimator = ValueAnimator.OfFloat(from, to);
bgAnimator.Update +=
(object sender, ValueAnimator.AnimatorUpdateEventArgs e) =>
{
float value = (float)e.Animation.AnimatedValue;
matrix.Reset();
matrix.PostTranslate(value, 0);
background.ImageMatrix = matrix;
};
bgAnimator.SetDuration(DURATION);
bgAnimator.AnimationEnd +=
(object sender, EventArgs e) =>
{
bgAnimDir = bgAnimDir == TO_LEFT ? TO_RIGHT : TO_LEFT;
animate();
};
bgAnimator.Start();
}
Исключения воспитывался в bgAnimator.Update
делегатом
Вы хотите показать анимацию в неактивном фрагменте, и именно поэтому у вас есть это исключение –