街景全景视图,带ViewRenderer Xamarin.Forms

街景全景视图,带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

我想通过Xamarin表单在自己的项目上查看Google地图的街景全景。然后,我在iOS上试用了ViewRenderer。它在iOS上工作。然而,当我尝试使用带有ViewRenderer的Android时。它不起作用。视图上发生了任何事情。请帮助我如何在ViewRenderer上执行街景全景查看

我使用以下代码:

Xamarin表单项目上的共享项目StreetView.xaml 公共类街景:街景 { } 它在我使用的iOS上工作

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)

星触觉(街景意向)