首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Xamarin.Forms.Maps中缩放按钮(+-)的位置

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

Stack Overflow用户
提问于 2017-04-06 19:12:31
回答 3查看 1.4K关注 0票数 1

我想在Xamarin.Forms中更改Zoom button controls (+)(-)map上的位置。有可能吗?

EN

回答 3

Stack Overflow用户

发布于 2017-04-11 15:55:00

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

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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
    }
}

渲染器:

代码语言:javascript
复制
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;
        }
    }
}

不要忘了像这样在渲染器中添加程序集:

代码语言:javascript
复制
[assembly: ExportRenderer(typeof(MapWithMyZoomControl), typeof(MapWithMyZoomControlRenderer))]

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

票数 1
EN

Stack Overflow用户

发布于 2019-05-02 20:10:24

代码语言:javascript
复制
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 );  

通过设置填充谷歌地图可以解决你的问题,在onmapready函数的渲染器文件中放置NativeMap.SetPadding(0,0,0,500 );

票数 1
EN

Stack Overflow用户

发布于 2021-05-12 03:41:33

您可以只使用padding属性。

代码语言:javascript
复制
<maps:Map
    Padding="0, 0, 0, 20">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43253490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档