【发布时间】:2023-04-02 06:40:01
【问题描述】:
我想在我的 Xamarin.Forms 应用程序中获取 gps 位置(纬度和经度)。我正在使用 Geolocator 插件,至少需要 5 秒才能获得 gps 位置。在此期间,我想创建加载动画。我做到了,但我无法停止动画。下面的代码效果就在那里 -> https://www.youtube.com/watch?v=MBf_VzaqkOQ&feature=youtu.be.
async void Button_Clicked(object sender, EventArgs e)
{
Plugin.Geolocator.Abstractions.Position position = new Plugin.Geolocator.Abstractions.Position();
if(!locationProvider.IsGpsAvailable()){
//...
}
else
{
try
{
btnGetLocation.IsEnabled = false;
settingsLayout.IsVisible = true;
labelLatitude.Text = string.Empty;
labelLongitude.Text = string.Empty;
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 0.5;
CancellationTokenSource cancellationTokenSoruce = new CancellationTokenSource();
CancellationToken ct = cancellationTokenSoruce.Token;
image1.Scale = 0;
image2.Scale = 0;
image3.Scale = 0;
Task.Run(async () =>
{
for (int i = 0; i < 20; i++)
{
await image1.ScaleTo(1, 400, Easing.Linear);
await image1.ScaleTo(0, 400, Easing.Linear);
await image1.TranslateTo(image1.TranslationX, image1.TranslationY, 600, Easing.Linear);
}
}, ct);
Task.Run(async () =>
{
for (int i = 0; i < 20; i++)
{
await image2.TranslateTo(image2.TranslationX, image2.TranslationY, 200, Easing.Linear);
await image2.ScaleTo(1, 400, Easing.Linear);
await image2.ScaleTo(0, 400, Easing.Linear);
await image2.TranslateTo(image2.TranslationX, image2.TranslationY, 400, Easing.Linear);
}
}, ct);
Task.Run(async () =>
{
for (int i = 0; i < 20; i++)
{
await image3.TranslateTo(image3.TranslationX, image3.TranslationY, 400, Easing.Linear);
await image3.ScaleTo(1, 400, Easing.Linear);
await image3.ScaleTo(0, 400, Easing.Linear);
await image3.TranslateTo(image3.TranslationX, image3.TranslationY, 200, Easing.Linear);
}
}, ct);
position = await locator.GetPositionAsync(timeoutMilliseconds: 10000);
cancellationTokenSoruce.Cancel();
ViewExtensions.CancelAnimations(image1);
ViewExtensions.CancelAnimations(image2);
ViewExtensions.CancelAnimations(image3);
}
catch
{
}
image1.Scale = 0;
image2.Scale = 0;
image3.Scale = 0;
labelLatitude.Text = position.Latitude.ToString();
labelLongitude.Text = position.Longitude.ToString();
//settingsLayout.IsVisible = false;
btnGetLocation.IsEnabled = true;
}
}
ViewExtensions.CancelAnimations(image);应该停止动画但它不起作用并且取消令牌应该停止任务中的方法。这段代码有什么问题?
编辑:我忘记了 xaml 文件:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XamarinFormsOne.Pages.GPSOwnTestPage"
BackgroundColor="{StaticResource PageBackgroundColor}">
<ContentPage.Content>
<StackLayout>
<Button x:Name="btnGetLocation"
Text="Get GPS Avability"
Clicked="Button_Clicked"/>
<Label x:Name="labelLatitude"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand"
TextColor="White"/>
<Label x:Name="labelLongitude"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand"
TextColor="White"/>
<StackLayout Orientation="Horizontal" x:Name="settingsLayout">
<Grid WidthRequest="120"/>
<Image x:Name="image1"
Source="settingsIcon.png"
HorizontalOptions="EndAndExpand"
VerticalOptions="EndAndExpand"/>
<Image x:Name="image2"
Source="settingsIcon.png"
HorizontalOptions="CenterAndExpand"
VerticalOptions="EndAndExpand"/>
<Image x:Name="image3"
Source="settingsIcon.png"
HorizontalOptions="StartAndExpand"
VerticalOptions="EndAndExpand"/>
<Grid WidthRequest="120"/>
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
【问题讨论】:
标签: c# animation xamarin.forms task