Skip to content

Commit

Permalink
feat: Add Camera.EaseTo function (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
tuyen-vuduc authored Jun 27, 2024
1 parent 1838c7a commit 979948d
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 19 deletions.
1 change: 1 addition & 0 deletions src/libs/Mapbox.Maui/IMapboxView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public interface IMapboxController
public interface IMapCameraController
{
void FlyTo(CameraOptions cameraOptions, AnimationOptions animationOptions = default, Action<AnimationState> completion = default);
void EaseTo(CameraOptions cameraOptions, AnimationOptions animationOptions = default, Action<AnimationState> completion = default);
}

public class MapTappedEventArgs : EventArgs
Expand Down
19 changes: 19 additions & 0 deletions src/libs/Mapbox.Maui/Platforms/Android/MapboxViewHandler.Camera.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,25 @@ namespace MapboxMaui;

partial class MapboxViewHandler : IMapCameraController
{
public void EaseTo(CameraOptions cameraOptions, AnimationOptions animationOptions = null, Action<AnimationState> completion = null)
{
var mapView = mapboxFragment?.MapView;

if (mapView == null) return;

var xcameraOptions = cameraOptions.ToNative();
var xanimationOptions = animationOptions?.ToNative();

// TODO Return Cancellable obj
CameraAnimationsUtils.EaseTo(
mapView.MapboxMap,
xcameraOptions,
xanimationOptions,
completion != null
? new XAnimationListener(completion)
: null);
}

public void FlyTo(CameraOptions cameraOptions, AnimationOptions animationOptions = default, Action<AnimationState> completion = default)
{
var mapView = mapboxFragment?.MapView;
Expand Down
23 changes: 23 additions & 0 deletions src/libs/Mapbox.Maui/Platforms/iOS/MapboxViewHandler.Camera.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,29 @@ namespace MapboxMaui;

partial class MapboxViewHandler : IMapCameraController
{
public void EaseTo(CameraOptions cameraOptions, AnimationOptions animationOptions = default, Action<AnimationState> completion = default)
{
var mapView = PlatformView.MapView;

if (mapView == null) return;

var xcameraOptions = cameraOptions.ToNative();
mapView.Camera().FlyTo(
xcameraOptions,
animationOptions?.Duration / 1000L ?? 0,
(position) =>
{
var xposition = position switch
{
UIKit.UIViewAnimatingPosition.Start => AnimatingPosition.Start,
UIKit.UIViewAnimatingPosition.End => AnimatingPosition.End,
UIKit.UIViewAnimatingPosition.Current => AnimatingPosition.Current,
_ => AnimatingPosition.Current,
};
completion?.Invoke(new AnimationState(xposition));
});
}
public void FlyTo(CameraOptions cameraOptions, AnimationOptions animationOptions = default, Action<AnimationState> completion = default)
{
var mapView = PlatformView.MapView;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,43 @@
namespace MapboxMauiQs;

public class CameraFlyAnimationExample : ContentPage, IExamplePage, IQueryAttributable
public class CameraAnimationsExample : ContentPage, IExamplePage, IQueryAttributable
{
MapboxView map;
IExampleInfo info;

public CameraFlyAnimationExample()
public CameraAnimationsExample()
{
iOSPage.SetUseSafeArea(this, false);

var grid = new Grid();
map = new MapboxView();
grid.Children.Add(map);

var btnMoveCamera = new Button()
var btnFlyCamera = new Button()
{
Text = "Move Camera",
Text = "Fly to Hanoi",
};
btnFlyCamera.Clicked += HandleCameraFlyTo;

var btnEaseCamera = new Button()
{
Text = "Ease to HCMC",
};
btnEaseCamera.Clicked += HandleCameraEaseTo;

var btns = new HorizontalStackLayout
{
Children = {
btnFlyCamera,
btnEaseCamera,
},
VerticalOptions = LayoutOptions.End,
HorizontalOptions = LayoutOptions.Center,
Margin = new Thickness(24),
Spacing = 16,
};
btnMoveCamera.Clicked += HandleMoveCamera;
grid.Children.Add(btnMoveCamera);

grid.Children.Add(btns);

map.MapReady += Map_MapReady;
map.StyleLoaded += Map_StyleLoaded;
Expand All @@ -30,9 +46,9 @@ public CameraFlyAnimationExample()
Content = grid;
}

private void HandleMoveCamera(object sender, EventArgs e)
private void HandleCameraFlyTo(object sender, EventArgs e)
{
var centerLocation = new MapPosition(21.0278, 105.8342);
var centerLocation = new MapPosition(21.028511, 105.804817);
var cameraOptions = new CameraOptions
{
Center = centerLocation,
Expand All @@ -43,6 +59,19 @@ private void HandleMoveCamera(object sender, EventArgs e)
new AnimationOptions(3000L));
}

private void HandleCameraEaseTo(object sender, EventArgs e)
{
var centerLocation = new MapPosition(10.762622, 106.660172);
var cameraOptions = new CameraOptions
{
Center = centerLocation,
Zoom = 12,
};
map.CameraController.EaseTo(
cameraOptions,
new AnimationOptions(3000L));
}

public void ApplyQueryAttributes(IDictionary<string, object> query)
{
info = query["example"] as IExampleInfo;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace MapboxMauiQs;

class CameraAnimationsExampleInfo : IExampleInfo
{
public string Group => "Lab";
public string Title => "Camera Animations";
public string Subtitle => "Demo how camera animations work.";
public string PageRoute => typeof(CameraAnimationsExample).FullName;
public int GroupIndex => 0;
public int Index => 65;
}

This file was deleted.

0 comments on commit 979948d

Please sign in to comment.