我想更改 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/