簡體   English   中英

在 Xamarin.Forms.Maps 中更改縮放按鈕 (+-) 的位置

[英]change the location of zoom buttons (+-) in Xamarin.Forms.Maps

我想在Xamarin.FormsXamarin.Forms mapZoom button controls (+)(-)Xamarin.Forms 是否可以?

經過一番研究,我認為沒有辦法重新定位google地圖的默認縮放控件,但是正如我們所說,您可以使用自定義渲染器創建自己的地圖控件,因此您可以自定義縮放控件,例如:

<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))]

現在您可以更改按鈕樣式和位置。

namespace WD.EMP.APP.Droid.Renderer {
    public class GEMapRenderer: MapRenderer {
        protected override void OnMapReady(Android.Gms.Maps.GoogleMap googleMap) {
            base.OnMapReady(googleMap);
            NativeMap.SetPadding(0, 0, 0, 500);
        }
    }
}

NativeMap.SetPadding(0,0,0,500 );  

通過設置填充谷歌地圖將解決您的問題,放置NativeMap.SetPadding(0,0,0,500 ); onmapready函數的渲染器文件中

您可以只使用 padding 屬性。

<maps:Map
    Padding="0, 0, 0, 20">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM