c# - 更改 Xamarin.Forms.Maps 中缩放按钮 (+-) 的位置

标签 c# xamarin.android xamarin.forms

我想更改 Xamarin.Forms map 缩放按钮控件 (+)(-) 的位置。是否可以?

最佳答案

经过一番研究,我认为没有方法可以重新定位谷歌地图的默认缩放控件,但正如我们所说,您可以使用自定义渲染器来创建自己的 map 控件,因此您可以自定义您的缩放控件,例如:

<Grid>
    <controls:MapWithMyZoomControl x:Name="map"
          HorizontalOptions="FillAndExpand"
          VerticalOptions="FillAndExpand" />

    <StackLayout Orientation="Vertical">
        <Button Text="Zoom In" Clicked="Zoom_In" />
        <Button Text="Zoom Out" Clicked="Zoom_Out" />
    </StackLayout>
</Grid>

MapWithMyZoomControl:

public class MapWithMyZoomControl : Map
{
    public ZoomState MyZoom
    {
        get { return (ZoomState)GetValue(MyZoomProperty); }
        set { SetValue(MyZoomProperty, value); }
    }

    public static readonly BindableProperty MyZoomProperty =
        BindableProperty.Create(
            propertyName: "MyZoom",
            returnType: typeof(ZoomState),
            declaringType: typeof(MapWithMyZoomControl),
            defaultValue: ZoomState.normal,
            propertyChanged: OnZoomPropertyChanged);

    public static void OnZoomPropertyChanged(BindableObject bindable, object oldValue, object newValue)
    {
    }

    public enum ZoomState
    {
        normal,
        zoomin,
        zoomout
    }
}

渲染器:

public class MapWithMyZoomControlRenderer : MapRenderer, IOnMapReadyCallback
{
    private GoogleMap map;

    public void OnMapReady(GoogleMap googleMap)
    {
        map = googleMap;

        map.UiSettings.ZoomControlsEnabled = false;
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Map> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null)
        {
            // Unsubscribe
        }

        if (e.NewElement != null)
        {
            var formsMap = (MapWithMyZoomControl)e.NewElement;

            ((MapView)Control).GetMapAsync(this);
        }
    }

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);
        var element = Element as MapWithMyZoomControl;
        if (e.PropertyName == "MyZoom" && map != null)
        {
            if (element.MyZoom == MapWithMyZoomControl.ZoomState.zoomin)
            {
                map.AnimateCamera(CameraUpdateFactory.ZoomIn());
            }
            else if (element.MyZoom == MapWithMyZoomControl.ZoomState.zoomout)
            {
                map.AnimateCamera(CameraUpdateFactory.ZoomOut());
            }
            element.MyZoom = MapWithMyZoomControl.ZoomState.normal;
        }
    }
}

不要忘记在渲染器中添加程序集,如下所示:

[assembly: ExportRenderer(typeof(MapWithMyZoomControl), typeof(MapWithMyZoomControlRenderer))]

现在您可以更改按钮样式和位置。

关于c# - 更改 Xamarin.Forms.Maps 中缩放按钮 (+-) 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43253490/

相关文章:

c# - 将 Mvvm Light 更新到版本 5 后,我需要做哪些更改才能使 RelayCommand CanExecute() 工作?

c# - Xamarin.Forms 中选项卡式页面的标题截断

android - Xamarin.Forms(Android): Add Bottom Border to Navigation Bar

ios - 如何在 Xamarin 表单 iOS 应用程序中打开 Apple Store 而不是 iTunes 商店

android - 在 xamarin 中关闭应用程序时接收推送通知

c# - 导航返回后,菜单项未显示在 Xamarin.Forms 中

c# - Visual Studio 无法发现测试 (xunit)

c# - PrincipalContext.ValidateCredentials 失败,错误为 "The server cannot handle directory requests."

c# - C#类的属性包

xamarin - 将映射实现到应用程序中