我想在Xamarin.Forms中更改Zoom button controls (+)(-)在map上的位置。有可能吗?
发布于 2017-04-11 15:55:00
经过一些研究,我认为没有办法重新定位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))]现在,您可以更改按钮样式和位置。
发布于 2019-05-02 20:10:24
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 );
发布于 2021-05-12 03:41:33
您可以只使用padding属性。
<maps:Map
Padding="0, 0, 0, 20">https://stackoverflow.com/questions/43253490
复制相似问题