Použití rozhraní API google Mapy ve vaší aplikaci
Použití Mapy aplikace je skvělé, ale někdy chcete zahrnout mapy přímo do aplikace. Kromě integrované aplikace map nabízí Google také nativní rozhraní API pro mapování pro Android. Rozhraní API Mapy je vhodné pro případy, kdy chcete mít větší kontrolu nad mapováním. Mezi možné možnosti rozhraní API Mapy patří:
- Změna bodu mapy prostřednictvím kódu programu
- Přidání a přizpůsobení značek
- Přidání poznámek k mapě s překryvnými vrstvami
Na rozdíl od nyní zastaralého rozhraní Google Mapy Android API v1 je Google Mapy Android API v2 součástí služeb Google Play. Aplikace Xamarin.Android musí splňovat některé povinné požadavky, aby bylo možné používat rozhraní API pro Android Mapy Google.
Požadavky rozhraní API služby Google Mapy
Před použitím Mapy rozhraní API je potřeba provést několik kroků, mezi které patří:
- Získání klíče rozhraní API Mapy
- Instalace sady SDK služby Google Play
- Nainstalujte Xamarin.GooglePlayServices. balíček Mapy z NuGetu
- Zadání požadovaných oprávnění
- Volitelně můžete vytvořit emulátor pomocí rozhraní GOOGLE API.
Získání klíče rozhraní API služby Google Mapy
Prvním krokem je získání klíče rozhraní API Mapy Google (mějte na paměti, že klíč rozhraní API nemůžete znovu použít ze starší verze rozhraní API Google Mapy v1). Informace o tom, jak získat a používat klíč rozhraní API s Xamarin.Androidem, najdete v tématu Získání klíče rozhraní API google Mapy.
Instalace sady SDK služby Google Play
Služby Google Play jsou technologie od Googlu, která umožňuje aplikacím pro Android využívat různé funkce Google, jako je Google+, Fakturace v aplikaci a Mapy. Tyto funkce jsou přístupné na zařízeních s Androidem jako služby na pozadí, které jsou obsaženy v apk služeb Google Play.
Aplikace pro Android komunikují se službami Google Play prostřednictvím klientské knihovny google Play Services. Tato knihovna obsahuje rozhraní a třídy pro jednotlivé služby, jako je Mapy. Následující diagram znázorňuje vztah mezi aplikací pro Android a službami Google Play:
Rozhraní API pro Android Mapy je poskytováno jako součást služeb Google Play. Než aplikace Xamarin.Android může používat rozhraní API Mapy, musí být sada SDK služby Google Play nainstalovaná pomocí Správce sady Android SDK. Následující snímek obrazovky ukazuje, kde ve Správci sady Android SDK najdete klienta služeb Google Play:
Poznámka:
Apk služby Google Play je licencovaný produkt, který nemusí být k dispozici na všech zařízeních. Pokud není nainstalovaný, google Mapy na zařízení nebude fungovat.
Nainstalujte Xamarin.GooglePlayServices. balíček Mapy z NuGetu
Balíček Xamarin.GooglePlayServices.Mapy obsahuje vazby Xamarin.Android pro rozhraní API služby Google Play Mapy. Chcete-li přidat balíček Mapy služeb Google Play, klikněte pravým tlačítkem myši na složku Reference projektu v Průzkumník řešení a klikněte na Spravovat balíčky NuGet...:
Tím se otevře Správce balíčků NuGet. Klikněte na Procházet a do vyhledávacího pole zadejte Mapy Xamarin Google Play Services. Vyberte Xamarin.GooglePlayServices.Mapy a klikněte na Nainstalovat. (Pokud byl tento balíček dříve nainstalován, klikněte na Aktualizace:):
Všimněte si, že jsou nainstalovány také následující balíčky závislostí:
- Xamarin.GooglePlayServices.Base
- Xamarin.GooglePlayServices.Basement
- Xamarin.GooglePlayServices.Tasks
Zadání požadovaných oprávnění
Aplikace musí identifikovat požadavky na hardware a oprávnění, aby bylo možné používat rozhraní API služby Google Mapy. Sada SDK služby Google Play automaticky uděluje některá oprávnění a vývojář je nemusí explicitně přidávat do AndroidManfest.XML:
Přístup ke stavu sítě – rozhraní API Mapy musí být schopné zkontrolovat, jestli může stáhnout dlaždice mapy.
Přístup k internetu – Přístup k internetu je nezbytný ke stažení mapových dlaždic a komunikaci se servery Google Play pro přístup k rozhraní API.
V AndroidManifest.XML rozhraní API Google Mapy Android musí být zadána následující oprávnění a funkce:
OpenGL ES v2 – Aplikace musí deklarovat požadavek na OpenGL ES v2.
Klíč rozhraní API google Mapy – Klíč rozhraní API slouží k potvrzení, že je aplikace zaregistrovaná a autorizovaná k používání služeb Google Play. Podrobnosti o tomto klíči najdete v tématu Získání klíče rozhraní API google Mapy.
Požádejte staršího klienta Apache HTTP – Aplikace, které cílí na Android 9.0 (úroveň rozhraní API 28) nebo vyšší, musí určovat, že starší klient Apache HTTP je volitelná knihovna, která se má použít.
Přístup k webovým službám Google – Aplikace potřebuje oprávnění pro přístup k webovým službám Google, které back-Mapy API pro Android.
Oprávnění pro oznámení služeb Google Play – Aplikace musí mít udělená oprávnění k přijímání vzdálených oznámení ze služeb Google Play.
Přístup k poskytovatelům umístění – Jedná se o volitelná oprávnění.
GoogleMap
Umožní třídě zobrazit umístění zařízení na mapě.
Kromě toho Android 9 odebral klientskou knihovnu Apache HTTP z cesty bootclass a proto není k dispozici pro aplikace, které cílí na rozhraní API 28 nebo vyšší. Pokud chcete pokračovat v používání klienta Apache HTTP v aplikacích, které cílí na rozhraní API 28 nebo vyšší, je nutné do application
uzlu souboru AndroidManifest.xml přidat následující řádek:
<application ...>
...
<uses-library android:name="org.apache.http.legacy" android:required="false" />
</application>
Poznámka:
Velmi staré verze sady Google Play SDK vyžadovaly aplikaci k vyžádání WRITE_EXTERNAL_STORAGE
oprávnění. Tento požadavek už není nutný s nedávnými vazbami Xamarinu pro služby Google Play.
Následující fragment kódu je příkladem nastavení, která je potřeba přidat do AndroidManifest.XML:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="4.5" package="com.xamarin.docs.android.mapsandlocationdemo2" android:versionCode="6">
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="28" />
<!-- Google Maps for Android v2 requires OpenGL ES v2 -->
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<!-- Necessary for apps that target Android 9.0 or higher -->
<uses-library android:name="org.apache.http.legacy" android:required="false" />
<!-- Permission to receive remote notifications from Google Play Services -->
<!-- Notice here that we have the package name of our application as a prefix on the permissions. -->
<uses-permission android:name="<PACKAGE NAME>.permission.MAPS_RECEIVE" />
<permission android:name="<PACKAGE NAME>.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
<!-- These are optional, but recommended. They will allow Maps to use the My Location provider. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application android:label="@string/app_name">
<!-- Put your Google Maps V2 API Key here. -->
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="YOUR_API_KEY" />
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<!-- Necessary for apps that target Android 9.0 or higher -->
<uses-library android:name="org.apache.http.legacy" android:required="false" />
</application>
</manifest>
Kromě vyžádání oprávnění AndroidManifest.XML musí aplikace také provádět kontroly oprávnění modulu runtime a ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
oprávnění. Další informace o provádění kontrol oprávnění za běhu najdete v průvodci oprávněními Xamarin.Android.
Vytvoření emulátoru pomocí rozhraní Google API
V případě, že fyzické zařízení s Androidem se službami Google Play není nainstalované, je možné vytvořit image emulátoru pro vývoj. Další informace najdete v Správce zařízení.
GoogleMap – třída
Jakmile jsou splněné požadavky, je čas začít vyvíjet aplikaci a používat rozhraní API pro Android Mapy. Třída GoogleMap je hlavním rozhraním API, které aplikace Xamarin.Android použije k zobrazení a interakci s Mapy Google pro Android. Tato třída má následující odpovědnosti:
Interakce se službami Google Play za účelem autorizace aplikace s webovou službou Google
Stažení, ukládání do mezipaměti a zobrazení dlaždic mapy
Zobrazení ovládacích prvků uživatelského rozhraní, jako je posouvání a přiblížení uživatele
Kreslení značek a geometrických obrazců na mapách
Tato GoogleMap
položka se přidá do aktivity jedním ze dvou způsobů:
MapFragment – MapFragment je specializovaný fragment, který funguje jako hostitel objektu
GoogleMap
. VyžadujeMapFragment
rozhraní ANDROID API úrovně 12 nebo vyšší. Starší verze Androidu můžou používat SupportMapFragment. Tato příručka se zaměří na používáníMapFragment
třídy.MapView – MapView je specializovaná podtřída Zobrazení, která může fungovat jako hostitel objektu
GoogleMap
. Uživatelé této třídy musí předat všechny metody životního cyklu aktivity doMapView
třídy.
Každý z těchto kontejnerů zveřejňuje Map
vlastnost, která vrací instanci GoogleMap
. Předvolba by měla být předána MapFragment třídy, protože je to jednodušší rozhraní API, které snižuje množství často používaného kódu, který musí vývojář implementovat ručně.
Přidání mapFragment do aktivity
Následující snímek obrazovky je příkladem jednoduchého MapFragment
:
Podobně jako u jiných tříd fragmentů existují dva způsoby, jak přidat MapFragment
do aktivity:
Deklarativní –
MapFragment
Dá se přidat prostřednictvím souboru rozložení XML pro aktivitu. Následující fragment kódu XML ukazuje příklad použití elementufragment
:<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.MapFragment" />
Programově – lze
MapFragment
programově vytvořit instanci pomocíMapFragment.NewInstance
metody a pak přidat do aktivity. Tento fragment kódu ukazuje nejjednodušší způsob vytvoření instance objektuMapFragment
a přidání do aktivity:var mapFrag = MapFragment.NewInstance(); activity.FragmentManager.BeginTransaction() .Add(Resource.Id.map_container, mapFrag, "map_fragment") .Commit();
Objekt je možné nakonfigurovat
MapFragment
předáním objektuGoogleMapOptions
doNewInstance
. Toto je popsáno v části Vlastnosti Mapy Google, které se zobrazí později v této příručce.
Metoda MapFragment.GetMapAsync
se používá k inicializaci GoogleMap
, která je hostována fragmentem a získat odkaz na objekt mapy hostovaný objektem MapFragment
. Tato metoda přebírá objekt, který implementuje IOnMapReadyCallback
rozhraní.
Toto rozhraní má jednu metodu, která bude vyvolána, IMapReadyCallback.OnMapReady(MapFragment map)
když je možné, aby aplikace interagovala s objektem GoogleMap
. Následující fragment kódu ukazuje, jak může aktivita Androidu MapFragment
IOnMapReadyCallback
inicializovat a implementovat rozhraní:
public class MapWithMarkersActivity : AppCompatActivity, IOnMapReadyCallback
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.MapLayout);
var mapFragment = (MapFragment) FragmentManager.FindFragmentById(Resource.Id.map);
mapFragment.GetMapAsync(this);
// remainder of code omitted
}
public void OnMapReady(GoogleMap map)
{
// Do something with the map, i.e. add markers, move to a specific location, etc.
}
}
Typy map
V rozhraní API Google Mapy je k dispozici pět různých typů map:
Normální – toto je výchozí typ mapování. Zobrazuje silnice a důležité přírodní rysy spolu s některými umělými body zájmu (například budovy a mosty).
Satelitní - Tato mapa zobrazuje satelitní fotografii.
Hybridní – tato mapa zobrazuje satelitní fotografii a silniční mapy.
Terén - To primárně ukazuje topografické rysy s některými silnicemi.
Žádné – Tato mapa nenačte žádné dlaždice, je vykreslena jako prázdná mřížka.
Následující obrázek znázorňuje tři různé typy map zleva doprava (normální, hybridní, terén):
Vlastnost GoogleMap.MapType
slouží k nastavení nebo změně typu mapy. Následující fragment kódu ukazuje, jak zobrazit satelitní mapu.
public void OnMapReady(GoogleMap map)
{
map.MapType = GoogleMap.MapTypeHybrid;
}
Vlastnosti Mapy Google
GoogleMap
definuje několik vlastností, které mohou řídit funkčnost a vzhled mapy. Jedním ze způsobů, jak nakonfigurovat počáteční stav objektu GoogleMap
GoogleMapOptions při vytváření objektu MapFragment
. Následující fragment kódu je jedním z příkladů použití objektu GoogleMapOptions
při vytváření MapFragment
:
GoogleMapOptions mapOptions = new GoogleMapOptions()
.InvokeMapType(GoogleMap.MapTypeSatellite)
.InvokeZoomControlsEnabled(false)
.InvokeCompassEnabled(true);
FragmentTransaction fragTx = FragmentManager.BeginTransaction();
mapFragment = MapFragment.NewInstance(mapOptions);
fragTx.Add(Resource.Id.map, mapFragment, "map");
fragTx.Commit();
Druhým způsobem konfigurace objektu GoogleMap
mapy je manipulace s vlastnostmi v uživatelském rozhraní Nastavení objektu mapy. Následující ukázka kódu ukazuje, jak nakonfigurovat zobrazení GoogleMap
ovládacích prvků lupy a kompasu:
public void OnMapReady(GoogleMap map)
{
map.UiSettings.ZoomControlsEnabled = true;
map.UiSettings.CompassEnabled = true;
}
Interakce s Mapou Google
Rozhraní API pro Android Mapy poskytuje rozhraní API, která umožňují aktivitě měnit zobrazení, přidávat značky, umístit vlastní překryvy nebo kreslit geometrické obrazce. V této části se dozvíte, jak provádět některé z těchto úloh v Xamarin.Androidu.
Změna bodu zobrazení
Mapy jsou modelované jako plochá rovina na obrazovce na základě projekce Mercatoru. Zobrazení mapy je to, že kamera vypadá přímo na této rovině. Umístění kamery lze ovládat změnou umístění, přiblížení, naklonění a ložiska. Třída Kamera Update slouží k přesunutí umístění kamery. CameraUpdate
objekty nejsou přímo instance, místo Mapy ROZHRANÍ API poskytuje Kamera UpdateFactory třída.
CameraUpdate
Po vytvoření objektu se předá jako parametr metodám GoogleMap.Move Kamera nebo GoogleMap.Animate Kamera. Metoda MoveCamera
aktualizuje mapu okamžitě, zatímco AnimateCamera
metoda poskytuje hladký a animovaný přechod.
Tento fragment kódu je jednoduchý příklad použití CameraUpdateFactory
k vytvoření CameraUpdate
, který zvýší úroveň přiblížení mapy o jednu úroveň přiblížení:
MapFragment mapFrag = (MapFragment) FragmentManager.FindFragmentById(Resource.Id.my_mapfragment_container);
mapFrag.GetMapAsync(this);
...
public void OnMapReady(GoogleMap map)
{
map.MoveCamera(CameraUpdateFactory.ZoomIn());
}
Rozhraní API Mapy poskytuje Kamera Pozice, která agreguje všechny možné hodnoty pozice kamery. Instanci této třídy lze poskytnout Kamera UpdateFactory.New Kamera Position metoda, která vrátí CameraUpdate
objekt. Rozhraní API Mapy obsahuje také třídu Kamera Position.Builder, která poskytuje rozhraní API fluent pro vytváření CameraPosition
objektů.
Následující fragment kódu ukazuje příklad vytvoření z objektu CameraUpdate
CameraPosition
a jeho použití ke změně pozice kamery na GoogleMap
:
public void OnMapReady(GoogleMap map)
{
LatLng location = new LatLng(50.897778, 3.013333);
CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
builder.Target(location);
builder.Zoom(18);
builder.Bearing(155);
builder.Tilt(65);
CameraPosition cameraPosition = builder.Build();
CameraUpdate cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition);
map.MoveCamera(cameraUpdate);
}
V předchozím fragmentu kódu je určité umístění na mapě reprezentováno třídou LatLng . Úroveň přiblížení je nastavená na 18, což je libovolná míra přiblížení, kterou používá Google Mapy. Ložisko je měření kompasu ve směru hodinových ručiček od Severu. Vlastnost Tilt řídí úhel zobrazení a určuje úhel 25 stupňů od svislého pohledu. Následující snímek obrazovky ukazuje GoogleMap
po spuštění předchozího kódu:
Kreslení na mapě
Rozhraní API pro Android Mapy poskytuje rozhraní API pro kreslení následujících položek na mapě:
Značky – jedná se o speciální ikony, které slouží k identifikaci jednoho umístění na mapě.
Překryvy – Jedná se o obrázek, který lze použít k identifikaci kolekce umístění nebo oblasti na mapě.
Čáry, mnohoúhelníky a kruhy – jedná se o rozhraní API, která umožňují aktivitám přidávat obrazce do mapy.
Značky
Rozhraní API Mapy poskytuje třídu Marker, která zapouzdřuje všechna data o jednom umístění na mapě. Ve výchozím nastavení třída Marker používá standardní ikonu poskytovanou Googlem Mapy. Vzhled značky je možné přizpůsobit a reagovat na kliknutí uživatelů.
Přidání značky
Chcete-li přidat značku do mapy, je nutné vytvořit nový MarkerOptions objekt a potom volat AddMarker metoda instance GoogleMap
. Tato metoda vrátí objekt Značky .
public void OnMapReady(GoogleMap map)
{
MarkerOptions markerOpt1 = new MarkerOptions();
markerOpt1.SetPosition(new LatLng(50.379444, 2.773611));
markerOpt1.SetTitle("Vimy Ridge");
map.AddMarker(markerOpt1);
}
Název značky se zobrazí v informačním okně , když uživatel klepne na značku. Následující snímek obrazovky ukazuje, jak tato značka vypadá:
Přizpůsobení značky
Ikonu používanou značkou je možné přizpůsobit voláním MarkerOptions.InvokeIcon
metody při přidání značky do mapy.
Tato metoda přebírá BitmapDescriptor objekt obsahující data potřebná k vykreslení ikony. BitmapDescriptorFactory třída poskytuje některé pomocné metody pro zjednodušení vytváření .BitmapDescriptor
Následující seznam představuje některé z těchto metod:
DefaultMarker(float colour)
– Použijte výchozí značku Google Mapy, ale změňte barvu.FromAsset(string assetName)
– Použijte vlastní ikonu ze zadaného souboru ve složce Assets.FromBitmap(Bitmap image)
– Jako ikonu použijte zadaný rastrový obrázek.FromFile(string fileName)
– Vytvořte vlastní ikonu ze souboru v zadané cestě.FromResource(int resourceId)
– Vytvořte vlastní ikonu ze zadaného prostředku.
Následující fragment kódu ukazuje příklad vytvoření azurové barevné výchozí značky:
public void OnMapReady(GoogleMap map)
{
MarkerOptions markerOpt1 = new MarkerOptions();
markerOpt1.SetPosition(new LatLng(50.379444, 2.773611));
markerOpt1.SetTitle("Vimy Ridge");
var bmDescriptor = BitmapDescriptorFactory.DefaultMarker (BitmapDescriptorFactory.HueCyan);
markerOpt1.InvokeIcon(bmDescriptor);
map.AddMarker(markerOpt1);
}
Okna s informacemi
Informační okna jsou speciální okna, která zobrazí informace uživateli, když klepne na konkrétní značku. Ve výchozím nastavení se v okně s informacemi zobrazí obsah názvu značky. Pokud není název přiřazený, nezobrazí se žádné okno s informacemi. Najednou se může zobrazit pouze jedno okno s informacemi.
Informační okno je možné přizpůsobit implementací rozhraní GoogleMap.IInfoWindowAdapter . V tomto rozhraní jsou dvě důležité metody:
public View GetInfoWindow(Marker marker)
– Tato metoda se volá k získání vlastního informačního okna pro značku. Pokud se vrátínull
, použije se výchozí vykreslování oken. Pokud tato metoda vrátí Zobrazení, bude toto zobrazení umístěny uvnitř informačního okna rámečku.public View GetInfoContents(Marker marker)
– Tato metoda bude volána pouze v případě, že GetInfoWindow vrátínull
. Tato metoda může vrátitnull
hodnotu, pokud se má použít výchozí vykreslení obsahu informačního okna. V opačném případě by tato metoda měla vrátit zobrazení s obsahem informačního okna.
Informační okno není živé zobrazení – místo toho Android převede zobrazení na statický rastrový obrázek a zobrazí ho na obrázku. To znamená, že informační okno nemůže reagovat na žádné dotykové události nebo gesta, ani se automaticky neaktualizuje. Chcete-li aktualizovat informační okno, je nutné volat GoogleMap.ShowInfoWindow metoda.
Následující obrázek ukazuje některé příklady některých přizpůsobených oken s informacemi. Obrázek na levé straně má vlastní obsah, zatímco obrázek vpravo má okno a obsah přizpůsobený zaoblené rohy:
GroundOverlays
Na rozdíl od značek, které identifikují konkrétní umístění na mapě, je GroundOverlay obrázek, který se používá k identifikaci kolekce umístění nebo oblasti na mapě.
Přidání GroundOverlay
Přidání překrytí země do mapy se podobá přidání značky do mapy. Nejprve se vytvoří objekt GroundOverlayOptions . Tento objekt se pak předá jako parametr GoogleMap.AddGroundOverlay
metodě, který vrátí GroundOverlay
objekt. Tento fragment kódu je příkladem přidání překrytí země do mapy:
BitmapDescriptor image = BitmapDescriptorFactory.FromResource(Resource.Drawable.polarbear);
GroundOverlayOptions groundOverlayOptions = new GroundOverlayOptions()
.Position(position, 150, 200)
.InvokeImage(image);
GroundOverlay myOverlay = googleMap.AddGroundOverlay(groundOverlayOptions);
Následující snímek obrazovky ukazuje tento překryv na mapě:
Čáry, kruhy a mnohoúhelníky
Existují tři jednoduché typy geometrických obrázků, které lze přidat do mapy:
Křivka - Jedná se o řadu propojených segmentů čar. Může označit cestu na mapě nebo vytvořit geometrický tvar.
Kruh – Tím nakreslete kruh na mapě.
Mnohoúhelník – Jedná se o uzavřený obrazec pro označení oblastí na mapě.
Křivky
Křivka je seznam po sobě jdoucích LatLng
objektů, které určují vrcholy každého segmentu čáry. Křivka se vytvoří tak, že nejprve vytvoří PolylineOptions
objekt a přidá do něj body. Objekt PolylineOption
se pak předá GoogleMap
objektu voláním AddPolyline
metody.
PolylineOption rectOptions = new PolylineOption();
rectOptions.Add(new LatLng(37.35, -122.0));
rectOptions.Add(new LatLng(37.45, -122.0));
rectOptions.Add(new LatLng(37.45, -122.2));
rectOptions.Add(new LatLng(37.35, -122.2));
rectOptions.Add(new LatLng(37.35, -122.0)); // close the polyline - this makes a rectangle.
googleMap.AddPolyline(rectOptions);
Kruhy
Kruhy se vytvářejí vytvořením první instance objektu CircleOption , který určí střed a poloměr kruhu v metrech. Kruh je vykreslen na mapě zavoláním GoogleMap.AddCircle. Následující fragment kódu ukazuje, jak nakreslit kruh:
CircleOptions circleOptions = new CircleOptions ();
circleOptions.InvokeCenter (new LatLng(37.4, -122.1));
circleOptions.InvokeRadius (1000);
googleMap.AddCircle (circleOptions);
Mnohoúhelníky
Polygon
jsou podobné Polyline
jako s, ale nejsou otevřené. Polygon
s jsou uzavřená smyčka a mají jejich vnitřní výplň. Polygon
s jsou vytvořeny přesně stejným způsobem jako , Polyline
s výjimkou GoogleMap.AddPolygon metoda vyvolána.
Polyline
Na rozdíl od , je Polygon
samozavírací. Mnohoúhelník bude uzavřen metodou AddPolygon
nakreslením čáry, která spojuje první a poslední body. Následující fragment kódu vytvoří plný obdélník nad stejnou oblastí jako předchozí fragment kódu v příkladu Polyline
.
PolygonOptions rectOptions = new PolygonOptions();
rectOptions.Add(new LatLng(37.35, -122.0));
rectOptions.Add(new LatLng(37.45, -122.0));
rectOptions.Add(new LatLng(37.45, -122.2));
rectOptions.Add(new LatLng(37.35, -122.2));
// notice we don't need to close off the polygon
googleMap.AddPolygon(rectOptions);
Reagování na události uživatelů
Existují tři typy interakcí, které uživatel může mít s mapou:
Kliknutí na značku – uživatel klikne na značku.
Přetažení značky – uživatel na mparger dlouho kliknul
Kliknutí na informační okno – Uživatel kliknul na informační okno.
Každá z těchto událostí bude podrobněji popsána níže.
Události kliknutí na značku
Událost MarkerClicked
se vyvolá, když uživatel klepne na značku. Tato událost přijímá GoogleMap.MarkerClickEventArgs
objekt jako parametr. Tato třída obsahuje dvě vlastnosti:
GoogleMap.MarkerClickEventArgs.Handled
– Tato vlastnost by měla být nastavena tak, abytrue
indikovala, že obslužná rutina události spotřebovala událost. Pokud je nastavena nafalse
výchozí chování, dojde kromě vlastního chování obslužné rutiny události.Marker
– Tato vlastnost je odkaz na značku, která vyvolalaMarkerClick
událost.
Tento fragment kódu ukazuje příklad MarkerClick
, který změní umístění kamery na nové místo na mapě:
void MapOnMarkerClick(object sender, GoogleMap.MarkerClickEventArgs markerClickEventArgs)
{
markerClickEventArgs.Handled = true;
var marker = markerClickEventArgs.Marker;
if (marker.Id.Equals(gotMauiMarkerId))
{
LatLng InMaui = new LatLng(20.72110, -156.44776);
// Move the camera to look at Maui.
PositionPolarBearGroundOverlay(InMaui);
googleMap.AnimateCamera(CameraUpdateFactory.NewLatLngZoom(InMaui, 13));
gotMauiMarkerId = null;
polarBearMarker.Remove();
polarBearMarker = null;
}
else
{
Toast.MakeText(this, $"You clicked on Marker ID {marker.Id}", ToastLength.Short).Show();
}
}
Události přetažení značky
Tato událost se vyvolá, když si uživatel přeje značku přetáhnout. Ve výchozím nastavení značky nelze přetáhnout. Značku lze nastavit jako přetahování nastavením Marker.Draggable
vlastnosti true
na metodu MarkerOptions.Draggable
nebo vyvoláním metody true
jako parametru.
Pokud chcete značku přetáhnout, musí uživatel nejprve na značku kliknout dlouho a pak musí prst zůstat na mapě. Když je prst uživatele přetažen na obrazovce, značka se přesune. Když prst uživatele zvedne z obrazovky, značka zůstane na místě.
Následující seznam popisuje různé události, které budou vyvolány pro přetahovatelnou značku:
GoogleMap.MarkerDragStart(object sender, GoogleMap.MarkerDragStartEventArgs e)
– Tato událost se vyvolá, když uživatel nejprve přetáhne značku.GoogleMap.MarkerDrag(object sender, GoogleMap.MarkerDragEventArgs e)
– Tato událost je vyvolána při přetahování značky.GoogleMap.MarkerDragEnd(object sender, GoogleMap.MarkerDragEndEventArgs e)
– Tato událost se vyvolá, když uživatel dokončí přetažení značky.
Každá z těchto EventArgs
vlastností obsahuje jednu vlastnost, P0
která je odkazem na Marker
přetahovaný objekt.
Události kliknutí na informační okno
Najednou se dá zobrazit jenom jedno okno s informacemi. Když uživatel klikne na informační okno v mapě, objekt mapy vyvolá InfoWindowClick
událost. Následující fragment kódu ukazuje, jak připojit obslužnou rutinu k události:
public void OnMapReady(GoogleMap map)
{
map.InfoWindowClick += MapOnInfoWindowClick;
}
private void MapOnInfoWindowClick (object sender, GoogleMap.InfoWindowClickEventArgs e)
{
Marker myMarker = e.Marker;
// Do something with marker.
}
Vzpomeňte si, že informační okno je statické View
, které se vykreslí jako obrázek na mapě. Všechny widgety, jako jsou tlačítka, zaškrtávací políčka nebo textová zobrazení umístěná uvnitř informačního okna, budou inertní a nemohou reagovat na žádné z jejich integrálních uživatelských událostí.