到目前为止,我还没有找到这个简单问题的答案:
如何为BackgroundImage
设置动画?
BackgroundImage = "1.jpg"; // <--- initial
countdown = new System.Timers.Timer();
countdown.Interval = 2000;
countdown.Elapsed += (sender, e) =>
{
if (BackgroundImage == "1.jpg")
{
System.Diagnostics.Debug.WriteLine("change background to 2");
Device.BeginInvokeOnMainThread(() =>
{
BackgroundImage = "marcus.jpg";
});
}
else
{
System.Diagnostics.Debug.WriteLine("change background to 1");
Device.BeginInvokeOnMainThread(() =>
{
BackgroundImage = "1.jpg";
});
}
};
countdown.Enabled = true;
现在,我想使用这种背景,而不是更改背景,我非常想通过幻灯片模拟Apple的照片:
1.jpg
2.jpg
但是,我不知道如何检索图像对象,以便对其进行动画处理。
请注意,我不需要gif
,只是简单的静止图像。
答案 0 :(得分:1)
看看PageRenderer
源代码(see here for Android),您可以很容易地发现,没有像您假设的那样底层Image
void UpdateBackgroundImage(Page view)
{
if (!string.IsNullOrEmpty(view.BackgroundImage))
this.SetBackground(Context.GetDrawable(view.BackgroundImage));
}
他们宁愿在本机控件中直接设置它。这意味着您必须模仿背景图像才能达到动画效果(这个词甚至存在吗?)。
我不会让您准备使用源代码,但是我用Grid
达到了类似的目的(也可能使用AbsoluteLayout
)
Grid
的行和列都只有一个Image
应该在其他任何子项之前(在集合中,不一定是临时的)添加Image
,则会直接添加新的背景图片Opacity
等于0 代码:
private void FadeViews(View newView, View currentView)
{
newView.Opacity = 0;
Grid.Children.Insert(0, newView);
newView.Animate("FadeIn", d => newView.Opacity = d, 0, 1);
newView.Animate("FadeOut", d => currentView.Opacity = d, 1, 0, finished: (_, __) => this.Grid.Children.Remove(currentView));
}
由于我使用的是TranslateTo
而不是Animate
,所以我的确切代码看起来有些不同,但是应该这样做。