![](/img/trans.png)
[英]Location permission for Android above 6.0 with Xamarin.Forms.Maps
[英]change the location of zoom buttons (+-) in Xamarin.Forms.Maps
我想在Xamarin.Forms
中Xamarin.Forms
map
上Zoom 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.