mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Reworked animations
This commit is contained in:
parent
12b33c5376
commit
8708c7ffe6
59
MapControl/Avalonia/OpacityHelper.Avalonia.cs
Normal file
59
MapControl/Avalonia/OpacityHelper.Avalonia.cs
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
|
||||
// Copyright © 2024 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using System.Threading.Tasks;
|
||||
using System;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Animation;
|
||||
using Avalonia.Styling;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace MapControl
|
||||
{
|
||||
public static class OpacityHelper
|
||||
{
|
||||
public static Task FadeIn(Control element)
|
||||
{
|
||||
var animation = new Animation
|
||||
{
|
||||
Duration = MapBase.ImageFadeDuration,
|
||||
Children =
|
||||
{
|
||||
new KeyFrame
|
||||
{
|
||||
KeyTime = TimeSpan.Zero,
|
||||
Setters = { new Setter(Visual.OpacityProperty, 0d) }
|
||||
},
|
||||
new KeyFrame
|
||||
{
|
||||
KeyTime = MapBase.ImageFadeDuration,
|
||||
Setters = { new Setter(Visual.OpacityProperty, 1d) }
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return animation.RunAsync(element);
|
||||
}
|
||||
|
||||
public static async Task SwapOpacities(Control topElement, Control bottomElement)
|
||||
{
|
||||
var animation = new Animation
|
||||
{
|
||||
Duration = MapBase.ImageFadeDuration,
|
||||
Children =
|
||||
{
|
||||
new KeyFrame
|
||||
{
|
||||
KeyTime = MapBase.ImageFadeDuration,
|
||||
Setters = { new Setter(Visual.OpacityProperty, 1d) }
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
await animation.RunAsync(topElement);
|
||||
|
||||
bottomElement.Opacity = 0d;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,35 +2,13 @@
|
|||
// Copyright © 2024 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using Avalonia.Animation;
|
||||
using Avalonia.Styling;
|
||||
using System;
|
||||
|
||||
namespace MapControl
|
||||
{
|
||||
public partial class Tile
|
||||
{
|
||||
private void AnimateImageOpacity()
|
||||
{
|
||||
var animation = new Animation
|
||||
{
|
||||
Duration = MapBase.ImageFadeDuration,
|
||||
Children =
|
||||
{
|
||||
new KeyFrame
|
||||
{
|
||||
KeyTime = TimeSpan.Zero,
|
||||
Setters = { new Setter(Visual.OpacityProperty, 0d) }
|
||||
},
|
||||
new KeyFrame
|
||||
{
|
||||
KeyTime = MapBase.ImageFadeDuration,
|
||||
Setters = { new Setter(Visual.OpacityProperty, 1d) }
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
_ = animation.RunAsync(Image);
|
||||
_ = OpacityHelper.FadeIn(Image);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,19 +17,16 @@ using Windows.Foundation;
|
|||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
using Microsoft.UI.Xaml.Media.Animation;
|
||||
using DispatcherTimer = Microsoft.UI.Dispatching.DispatcherQueueTimer;
|
||||
#elif UWP
|
||||
using Windows.Foundation;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Media.Animation;
|
||||
#else
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Animation;
|
||||
using System.Windows.Threading;
|
||||
#endif
|
||||
|
||||
|
|
@ -209,7 +206,7 @@ namespace MapControl
|
|||
}
|
||||
}
|
||||
|
||||
SwapImages(image, boundingBox);
|
||||
await SwapImages(image, boundingBox);
|
||||
|
||||
updateInProgress = false;
|
||||
}
|
||||
|
|
@ -241,7 +238,7 @@ namespace MapControl
|
|||
}
|
||||
}
|
||||
|
||||
private void SwapImages(ImageSource image, BoundingBox boundingBox)
|
||||
private async Task SwapImages(ImageSource image, BoundingBox boundingBox)
|
||||
{
|
||||
if (Children.Count >= 2)
|
||||
{
|
||||
|
|
@ -254,21 +251,7 @@ namespace MapControl
|
|||
topImage.Source = image;
|
||||
SetBoundingBox(topImage, boundingBox);
|
||||
|
||||
#if AVALONIA
|
||||
#else
|
||||
topImage.BeginAnimation(OpacityProperty, new DoubleAnimation
|
||||
{
|
||||
To = 1d,
|
||||
Duration = MapBase.ImageFadeDuration
|
||||
});
|
||||
|
||||
bottomImage.BeginAnimation(OpacityProperty, new DoubleAnimation
|
||||
{
|
||||
To = 0d,
|
||||
BeginTime = MapBase.ImageFadeDuration,
|
||||
Duration = TimeSpan.Zero
|
||||
});
|
||||
#endif
|
||||
await OpacityHelper.SwapOpacities(topImage, bottomImage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -221,9 +221,6 @@
|
|||
<Compile Include="..\Shared\WorldMercatorProjection.cs">
|
||||
<Link>WorldMercatorProjection.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\WinUI\Animatable.WinUI.cs">
|
||||
<Link>Animatable.WinUI.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\WinUI\DependencyPropertyHelper.WinUI.cs">
|
||||
<Link>DependencyPropertyHelper.WinUI.cs</Link>
|
||||
</Compile>
|
||||
|
|
@ -263,6 +260,9 @@
|
|||
<Compile Include="..\WinUI\Matrix.WinUI.cs">
|
||||
<Link>Matrix.WinUI.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\WinUI\OpacityHelper.WinUI.cs">
|
||||
<Link>OpacityHelper.WinUI.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\WinUI\Point.WinUI.cs">
|
||||
<Link>Point.WinUI.cs</Link>
|
||||
</Compile>
|
||||
|
|
|
|||
32
MapControl/WPF/OpacityHelper.WPF.cs
Normal file
32
MapControl/WPF/OpacityHelper.WPF.cs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
|
||||
// Copyright © 2024 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Media.Animation;
|
||||
|
||||
namespace MapControl
|
||||
{
|
||||
public static class OpacityHelper
|
||||
{
|
||||
public static async Task SwapOpacities(UIElement topElement, UIElement bottomElement)
|
||||
{
|
||||
topElement.BeginAnimation(UIElement.OpacityProperty, new DoubleAnimation
|
||||
{
|
||||
To = 1d,
|
||||
Duration = MapBase.ImageFadeDuration
|
||||
});
|
||||
|
||||
bottomElement.BeginAnimation(UIElement.OpacityProperty, new DoubleAnimation
|
||||
{
|
||||
To = 0d,
|
||||
BeginTime = MapBase.ImageFadeDuration,
|
||||
Duration = TimeSpan.Zero
|
||||
});
|
||||
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
|
||||
// Copyright © 2024 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
#if WINUI
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Media.Animation;
|
||||
#else
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Media.Animation;
|
||||
#endif
|
||||
|
||||
namespace MapControl
|
||||
{
|
||||
internal static class Animatable
|
||||
{
|
||||
public static void BeginAnimation(this DependencyObject obj, string property, Timeline animation)
|
||||
{
|
||||
Storyboard.SetTargetProperty(animation, property);
|
||||
Storyboard.SetTarget(animation, obj);
|
||||
|
||||
var storyboard = new Storyboard();
|
||||
storyboard.Children.Add(animation);
|
||||
storyboard.Begin();
|
||||
}
|
||||
|
||||
public static void BeginAnimation(this DependencyObject obj, DependencyProperty property, Timeline animation)
|
||||
{
|
||||
if (animation != null && property == UIElement.OpacityProperty)
|
||||
{
|
||||
BeginAnimation(obj, nameof(UIElement.Opacity), animation);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -175,7 +175,7 @@ namespace MapControl
|
|||
|
||||
centerAnimation.Completed += CenterAnimationCompleted;
|
||||
|
||||
this.BeginAnimation(nameof(AnimatedCenter), centerAnimation);
|
||||
BeginAnimation(nameof(AnimatedCenter), centerAnimation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -270,7 +270,7 @@ namespace MapControl
|
|||
|
||||
zoomLevelAnimation.Completed += ZoomLevelAnimationCompleted;
|
||||
|
||||
this.BeginAnimation(nameof(ZoomLevel), zoomLevelAnimation);
|
||||
BeginAnimation(nameof(ZoomLevel), zoomLevelAnimation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -346,7 +346,7 @@ namespace MapControl
|
|||
|
||||
headingAnimation.Completed += HeadingAnimationCompleted;
|
||||
|
||||
this.BeginAnimation(nameof(Heading), headingAnimation);
|
||||
BeginAnimation(nameof(Heading), headingAnimation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -362,5 +362,15 @@ namespace MapControl
|
|||
headingAnimation = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void BeginAnimation(string property, Timeline animation)
|
||||
{
|
||||
Storyboard.SetTarget(animation, this);
|
||||
Storyboard.SetTargetProperty(animation, property);
|
||||
|
||||
var storyboard = new Storyboard();
|
||||
storyboard.Children.Add(animation);
|
||||
storyboard.Begin();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
47
MapControl/WinUI/OpacityHelper.WinUI.cs
Normal file
47
MapControl/WinUI/OpacityHelper.WinUI.cs
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
|
||||
// Copyright © 2024 Clemens Fischer
|
||||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
#if WINUI
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Media.Animation;
|
||||
#else
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Media.Animation;
|
||||
#endif
|
||||
|
||||
namespace MapControl
|
||||
{
|
||||
public static class OpacityHelper
|
||||
{
|
||||
public static void BeginOpacityAnimation(DependencyObject obj, DoubleAnimation animation)
|
||||
{
|
||||
Storyboard.SetTargetProperty(animation, nameof(UIElement.Opacity));
|
||||
Storyboard.SetTarget(animation, obj);
|
||||
|
||||
var storyboard = new Storyboard();
|
||||
storyboard.Children.Add(animation);
|
||||
storyboard.Begin();
|
||||
}
|
||||
|
||||
public static async Task SwapOpacities(UIElement topElement, UIElement bottomElement)
|
||||
{
|
||||
BeginOpacityAnimation(topElement, new DoubleAnimation
|
||||
{
|
||||
To = 1d,
|
||||
Duration = MapBase.ImageFadeDuration
|
||||
});
|
||||
|
||||
BeginOpacityAnimation(bottomElement, new DoubleAnimation
|
||||
{
|
||||
To = 0d,
|
||||
BeginTime = MapBase.ImageFadeDuration,
|
||||
Duration = TimeSpan.Zero
|
||||
});
|
||||
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ namespace MapControl
|
|||
{
|
||||
private void BeginOpacityAnimation()
|
||||
{
|
||||
Image.BeginAnimation(UIElement.OpacityProperty,
|
||||
OpacityHelper.BeginOpacityAnimation(Image,
|
||||
new DoubleAnimation
|
||||
{
|
||||
From = 0d,
|
||||
|
|
|
|||
Loading…
Reference in a new issue