街景全景视图,带ViewRenderer Xamarin.Forms
我想通过Xamarin表单在自己的项目上查看Google地图的街景全景。然后,我在iOS上试用了ViewRenderer。它在iOS上工作。然而,当我尝试使用带有ViewRenderer的Android时。它不起作用。视图上发生了任何事情。请帮助我如何在ViewRenderer上执行街景全景查看 我使用以下代码: Xamarin表单项目上的共享项目StreetView.xaml 公共类街景:街景 { } 它在我使用的iOS上工作街景全景视图,带ViewRenderer Xamarin.Forms,xamarin.forms,google-street-view,Xamarin.forms,Google Street View,我想通过Xamarin表单在自己的项目上查看Google地图的街景全景。然后,我在iOS上试用了ViewRenderer。它在iOS上工作。然而,当我尝试使用带有ViewRenderer的Android时。它不起作用。视图上发生了任何事情。请帮助我如何在ViewRenderer上执行街景全景查看 我使用以下代码: Xamarin表单项目上的共享项目StreetView.xaml 公共类街景:街景 { } 它在我使用的iOS上工作 assembly: ExportRenderer(typeof(S
assembly: ExportRenderer(typeof(StreetView), typeof(StreetViewRenderer))]
namespace Yournamespace.iOS.Renderer
{
public class StreetViewRenderer : ViewRenderer<StreetView, PanoramaView>
{
PanoramaView panoramaView;
protected override void OnElementChanged(ElementChangedEventArgs<StreetView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
CGRect rect = new CGRect(0, 0, App.ScreenWidth, App.ScreenHeight);
panoramaView = new PanoramaView(rect);
SetNativeControl(panoramaView);
if (SharedSystem.Current.CurrentVehicle.PlateNumber == null)
{
SetCoordinate(40.968845, 29.065849);
}
else
SetCoordinate(SharedSystem.Current.CurrentVehicle.DeviceLatitude.Value, SharedSystem.Current.CurrentVehicle.DeviceLongitude.Value);
}
if (e.OldElement != null)
{
// Unsubscribe
panoramaView.DidMoveToPanoramaNearCoordinate -= PanoramaView_DidMoveToPanoramaNearCoordinate;
MessagingCenter.Unsubscribe<Vehicle>(this, "SelectedPin");
}
if (e.NewElement != null)
{
// Subscribes
MessagingCenter.Subscribe<Vehicle>(this, "SelectedPin", (sender) =>
{
if(SharedSystem.Current.CurrentVehicle.PlateNumber == sender.PlateNumber)
SetCoordinate(sender.DeviceLatitude.Value,sender.DeviceLongitude.Value);
});
MessagingCenter.Subscribe<Vehicle>(this, "ScrollToVehicle", (sender) =>
{
if (SharedSystem.Current.CurrentVehicle.PlateNumber == sender.PlateNumber)
SetCoordinate(sender.DeviceLatitude.Value, sender.DeviceLongitude.Value);
});
panoramaView.DidMoveToPanoramaNearCoordinate += PanoramaView_DidMoveToPanoramaNearCoordinate;
}
}
public void SetCoordinate(double latitude, double longitude)
{
Device.BeginInvokeOnMainThread(() =>
{
CLLocationCoordinate2D location = new CLLocationCoordinate2D(latitude, longitude);
panoramaView.MoveNearCoordinate(location);
});
}
void PanoramaView_DidMoveToPanoramaNearCoordinate(object sender, GMSPanoramaDidMoveToPanoramaNearCoordinateEventArgs e)
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
Control.Dispose();
}
base.Dispose(disposing);
}
}
assembly:ExportRenderer(typeof(StreetView),typeof(StreetViewRenderer))]
命名空间Yournamespace.iOS.Renderer
{
公共类StreetViewRenderer:ViewRenderer
{
全景视图;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)
{
CGRect rect=新的CGRect(0,0,App.ScreenWidth,App.ScreenHeight);
全景视图=新全景视图(rect);
SetNativeControl(全景视图);
if(SharedSystem.Current.CurrentVehicle.PlateNumber==null)
{
设定坐标(40.968845,29.065849);
}
其他的
设置坐标(SharedSystem.Current.CurrentVehicle.DeviceLatitude.Value,SharedSystem.Current.CurrentVehicle.DeviceLongLevel.Value);
}
if(e.OldElement!=null)
{
//退订
panoramaView.DidMoveToPanoramaNearCoordinate-=全景视图\u DidMoveToPanoramaNearCoordinate;
MessagingCenter.Unsubscribe(此“SelectedPin”);
}
if(例如NewElement!=null)
{
//订阅
MessagingCenter.Subscribe(此“SelectedPin”,(发件人)=>
{
if(SharedSystem.Current.CurrentVehicle.PlateNumber==发送方.PlateNumber)
SetCoordinate(sender.DeviceLatitude.Value,sender.DeviceLongity.Value);
});
MessagingCenter.Subscribe(此“ScrollToVehicle”,(发件人)=>
{
if(SharedSystem.Current.CurrentVehicle.PlateNumber==发送方.PlateNumber)
设置坐标(sender.DeviceLatitude.Value,sender.DeviceLongitude.Value);
});
panoramaView.DidMoveToPanoramaNearCoordinate+=全景视图\u DidMoveToPanoramaNearCoordinate;
}
}
公共坐标(双纬度、双经度)
{
Device.beginInvokeMainThread(()=>
{
CLLocationCoordinate2D位置=新的CLLocationCoordinate2D(纬度、经度);
全景视图。移动近坐标(位置);
});
}
无效全景视图_didMoveTopAnoraManearCoordination(对象发送器,GMSPANORAMADIDMMoveTopAnoraManearCoordinateEventargs e)
{
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
Control.Dispose();
}
基地。处置(处置);
}
}
但是任何代码都可以在Android上使用ViewRenderer。
请帮助我如何在Android上执行街景全景查看不确定是否有人以Xamarin的形式制作。Xamarin说“Android也支持从意图加载街景。要启动街景,只需使用google.streetview URI方案,如下代码所示: var streetViewUri=Android.Net.Uri.Parse(“google.streetview:cbll=42.374260,-71.120824&cbp=1,90,0,1.0&mz=20”) var streetViewIntent=新意图(Intent.ActionView,streetViewUri) 星触觉(街景意向)