图像未从AbsoluteLayout';s Xamarin.forms上的儿童
本文关键字:forms Xamarin AbsoluteLayout 图像 | 更新日期: 2023-09-27 18:01:12
我正在使用Xamarin.forms PCL项目制作应用程序。
我制作了计时器,每三秒调用一次这个函数。
void CreateBGAndAnimate()
{
Image bg = new Image()
{
Source = "_pagebaby_bg.png",
Aspect = Aspect.Fill
};
AbsoluteLayout.SetLayoutFlags(bg, AbsoluteLayoutFlags.All);
AbsoluteLayout.SetLayoutBounds(bg, new Rectangle(0.5, 1, 1, 0.5));
xAbsoluteLayout.Children.Insert(1, bg);
bg.Opacity = 0;
Task.Factory.StartNew(async () =>
{
await bg.FadeTo(1, 500);
await bg.ScaleTo(2, 1000, Easing.SinInOut);
xAbsoluteLayout.Children.Remove(bg);
});
}
还有一个非常奇怪的问题。第一个图像永远不会被删除。和第一个之后创建的图像被删除,正如我所期望的。
有人面临同样的问题吗?
我做错了什么?
谢谢。
您必须在UI线程(主线程(中执行UI操作。为此,请使用设备。BeginInvokeOnMainThread方法。
void CreateBGAndAnimate()
{
Image bg = new Image()
{
Source = "_pagebaby_bg.png",
Aspect = Aspect.Fill
};
AbsoluteLayout.SetLayoutFlags(bg, AbsoluteLayoutFlags.All);
AbsoluteLayout.SetLayoutBounds(bg, new Rectangle(0.5, 1, 1, 0.5));
xAbsoluteLayout.Children.Insert(1, bg);
bg.Opacity = 0;
Task.Factory.StartNew(async () =>
{
await bg.FadeTo(1, 500);
await bg.ScaleTo(2, 1000, Easing.SinInOut);
Device.BeginInvokeOnMainThread(() => xAbsoluteLayout.Children.Remove(bg));
});
}
不确定,但我肯定会确保操作在UI线程上运行,并且我切换Opacity
并添加控件,因为您不希望控件在添加后的一瞬间可见。
我还插入了一个暂停:
...
bg.Opacity = 0;
xAbsoluteLayout.Children.Insert(1, bg);
Xamarin.Forms.Device.BeginInvokeOnMainThread(async () =>
{
await bg.FadeTo(1, 500);
await bg.ScaleTo(2, 1000, Easing.SinInOut);
xAbsoluteLayout.Children.Remove(bg);
});