Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Haritalar uygulamasını kullanmak harikadır, ancak bazen haritaları doğrudan uygulamanıza eklemek istersiniz. Google, yerleşik haritalar uygulamasına ek olarak Android için yerel bir eşleme API'sini de sunar. Haritalar API'si, eşleme deneyimi üzerinde daha fazla denetim sahibi olmak istediğiniz durumlar için uygundur. Haritalar API'siyle mümkün olan şeyler şunlardır:
- Program aracılığıyla haritanın bakış açısını değiştirme.
- İşaretleyici ekleme ve özelleştirme.
- Yer paylaşımlı haritaya ek açıklama ekleme.
Google Haritalar Android API v1'in aksine Google Haritalar Android API v2, Google Play Services'ın bir parçasıdır. Xamarin.Android uygulaması, Google Haritalar Android API'sini kullanabilmek için bazı zorunlu önkoşulları karşılamalıdır.
Google Haritalar API önkoşulları
Haritalar API'sini kullanabilmeniz için önce aşağıdakiler gibi birkaç adım atılması gerekir:
- Haritalar API anahtarı alma
- Google Play Services SDK'sını yükleme
- Xamarin.GooglePlayServices'i yükleyin. NuGet'ten Haritalar paketi
- Gerekli izinleri belirtin
- İsteğe bağlı olarak, Google API'leri ile öykünücü oluşturma
Google Haritalar API Anahtarı alma
İlk adım bir Google Haritalar API anahtarı almaktır (eski Google Haritalar v1 API'sinden bir API anahtarını yeniden kullanamayacağınızı unutmayın). Xamarin.Android ile API anahtarını alma ve kullanma hakkında bilgi için bkz. Google Haritalar API Anahtarı Alma.
Google Play Services SDK'sını yükleme
Google Play Hizmetleri, Android uygulamalarının Google+, Uygulama İçi Faturalama ve Haritalar gibi çeşitli Google özelliklerinden yararlanmasına olanak tanıyan bir Google teknolojisidir. Bu özelliklere Android cihazlarda Google Play Hizmetleri APK'sinde yer alan arka plan hizmetleri olarak erişilebilir.
Android uygulamaları, Google Play Services istemci kitaplığı aracılığıyla Google Play Services ile etkileşim kurar. Bu kitaplık, Haritalar gibi tek tek hizmetlerin arabirimlerini ve sınıflarını içerir. Aşağıdaki diyagramda Bir Android uygulaması ile Google Play Hizmetleri arasındaki ilişki gösterilmektedir:

Android Haritalar API'si, Google Play Hizmetleri'nin bir parçası olarak sağlanır. Xamarin.Android uygulamasının Haritalar API'sini kullanabilmesi için Google Play Services SDK'sının Android SDK Yöneticisi kullanılarak yüklenmesi gerekir. Aşağıdaki ekran görüntüsünde, Android SDK Yöneticisi'nde Google Play hizmetleri istemcisinin nerede bulunabileceği gösterilmektedir:

Not
Google Play hizmetleri APK'sı, tüm cihazlarda mevcut olmayabilecek lisanslı bir üründür. Yüklü değilse Google Haritalar cihazda çalışmaz.
Xamarin.GooglePlayServices'i yükleyin. NuGet'ten Haritalar paketi
Xamarin.GooglePlayServices.Haritalar paketi, Google Play Services Haritalar API'sine yönelik Xamarin.Android bağlamalarını içerir. Google Play Services Harita paketini eklemek için, Çözüm Gezgini projenizin Başvurular klasörüne sağ tıklayın ve NuGet Paketlerini Yönet...' seçeneğine tıklayın:

Bu, NuGet Paket Yöneticisi açar. Gözat'a tıklayın ve arama alanına Xamarin Google Play Services Haritalar girin. Xamarin.GooglePlayServices.Haritalar'ı seçin ve Yükle'ye tıklayın. (Bu paket daha önce yüklenmişse, Güncelleştir.):
Aşağıdaki bağımlılık paketlerinin de yüklü olduğuna dikkat edin:
- Xamarin.GooglePlayServices.Base
- Xamarin.GooglePlayServices.Basement
- Xamarin.GooglePlayServices.Tasks
Gerekli izinleri belirtin
Uygulamaların Google Haritalar API'sini kullanabilmesi için donanım ve izin gereksinimlerini tanımlaması gerekir. Bazı izinler Google Play Services SDK'sı tarafından otomatik olarak verilir ve bir geliştiricinin bunları açıkça AndroidManfest.XML eklemesi gerekmez:
Ağ Durumuna Erişim – Haritalar API'sinin harita kutucuklarını indirip indiremeyeceğini denetleyebilmesi gerekir.
İnternet Erişimi – Harita kutucuklarını indirmek ve API erişimi için Google Play Sunucuları ile iletişim kurmak için İnternet erişimi gereklidir.
Google Haritalar Android API'sinin AndroidManifest.XML aşağıdaki izinler ve özellikler belirtilmelidir:
OpenGL ES v2 – Uygulamanın OpenGL ES v2 gereksinimini bildirmesi gerekir.
Google Haritalar API Anahtarı – API anahtarı, uygulamanın kayıtlı ve Google Play Hizmetleri'ni kullanma yetkisine sahip olduğunu onaylamak için kullanılır. Bu anahtarla ilgili ayrıntılar için bkz. Google Haritalar API Anahtarı Alma.
Eski Apache HTTP istemcisini isteme – Android 9.0 (API düzeyi 28) veya üzerini hedefleyen uygulamalar, eski Apache HTTP istemcisinin isteğe bağlı bir kitaplık olduğunu belirtmelidir.
Google Web Tabanlı Hizmetlere erişim – Uygulamanın Android Haritalar API'sini destekleyen Google web hizmetlerine erişmek için izinlere ihtiyacı vardır.
Google Play Hizmetleri Bildirimleri için izinler – Uygulamaya Google Play Hizmetleri'nden uzaktan bildirim alma izni verilmelidir.
Konum Sağlayıcılarına Erişim – Bunlar isteğe bağlı izinlerdir. Sınıfın
GoogleMapcihazın konumunu haritada görüntülemesine izin verir.
Ayrıca Android 9, Apache HTTP istemci kitaplığını bootclasspath'ten kaldırmıştır ve bu nedenle API 28 veya üzerini hedefleyen uygulamalar tarafından kullanılamaz. API 28 veya üzerini application hedefleyen uygulamalarda Apache HTTP istemcisini kullanmaya devam etmek için aşağıdaki satırın AndroidManifest.xml dosyanızın düğümüne eklenmesi gerekir:
<application ...>
...
<uses-library android:name="org.apache.http.legacy" android:required="false" />
</application>
Not
Google Play SDK'sının çok eski sürümleri, izin istemek için bir uygulama gerektiriyordu WRITE_EXTERNAL_STORAGE . Google Play Services için son Xamarin bağlamalarında bu gereksinim artık gerekli değildir.
Aşağıdaki kod parçacığı, AndroidManifest.XML eklenmesi gereken ayarların bir örneğidir:
<?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>
AndroidManifest.XML izinleri istemeye ek olarak, bir uygulamanın ve izinleri için ACCESS_COARSE_LOCATION çalışma zamanı izin denetimleri de gerçekleştirmesi ACCESS_FINE_LOCATIONgerekir. Çalışma zamanı izin denetimleri gerçekleştirme hakkında daha fazla bilgi için Xamarin.Android İzinleri kılavuzuna bakın.
Google API'leri ile Öykünücü oluşturma
Google Play hizmetleri olan fiziksel bir Android cihazının yüklü olmaması durumunda geliştirme için bir öykünücü görüntüsü oluşturmak mümkündür. Daha fazla bilgi için bkz. Aygıt Yöneticisi.
GoogleMap Sınıfı
Önkoşullar karşılandıktan sonra uygulamayı geliştirmeye başlamanın ve Android Haritalar API'sini kullanmanın zamanı geldi. GoogleMap sınıfı, bir Xamarin.Android uygulamasının Android için Google Haritalar görüntülemek ve bunlarla etkileşime geçmek için kullanacağı ana API'dir. Bu sınıf aşağıdaki sorumluluklara sahiptir:
Uygulamayı Google web hizmetiyle yetkilendirmek için Google Play hizmetleriyle etkileşim kurma.
Harita kutucuklarını indirme, önbelleğe alma ve görüntüleme.
Kullanıcıya kaydırma ve yakınlaştırma gibi kullanıcı arabirimi denetimlerini görüntüleme.
Haritalarda işaretçiler ve geometrik şekiller çizme.
GoogleMap iki yoldan biriyle bir Etkinliğe eklenir:
MapFragment - MapFragment, nesne için
GoogleMapkonak işlevi gören özelleştirilmiş bir Parçadır. içinMapFragmentAndroid API düzeyi 12 veya üzeri gerekir. Android'in eski sürümleri SupportMapFragment'ı kullanabilir. Bu kılavuz sınıfınıMapFragmentkullanmaya odaklanacaktır.MapView - MapView , bir nesne için
GoogleMapkonak görevi görebilen özel bir Görünüm alt sınıfıdır. Bu sınıfın kullanıcıları tüm Etkinlik yaşam döngüsü yöntemlerini sınıfınaMapViewiletmelidir.
Bu kapsayıcıların Map her biri, örneğini GoogleMapdöndüren bir özelliği kullanıma sunar. Bir geliştiricinin el ile uygulaması gereken ortak kod miktarını azaltan daha basit bir API olduğundan MapFragment sınıfına tercih edilmelidir.
Etkinliğe MapFragment Ekleme
Aşağıdaki ekran görüntüsü basit MapFragmentbir örnektir:
Diğer Parça sınıflarına benzer şekilde, bir Etkinliğe eklemenin MapFragment iki yolu vardır:
Bildirimli olarak - Etkinliğin
MapFragmentXML düzen dosyası aracılığıyla eklenebilir. Aşağıdaki XML kod parçacığında öğesinin nasıl kullanılacağına ilişkin bir örnek gösterilmektedirfragment:<?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" />Program aracılığıyla -
MapFragmentyöntemi kullanılarakMapFragment.NewInstanceprogram aracılığıyla örneği oluşturulabilir ve ardından bir Etkinliğe eklenebilir. Bu kod parçacığı, bir nesne örneği oluşturmanın ve BirMapFragmentEtkinliğe eklemenin en basit yolunu gösterir:var mapFrag = MapFragment.NewInstance(); activity.FragmentManager.BeginTransaction() .Add(Resource.Id.map_container, mapFrag, "map_fragment") .Commit();nesnesini öğesine geçirerek
GoogleMapOptionsNewInstanceyapılandırmakMapFragmentmümkündür. Bu konu, bu kılavuzun ilerleyen bölümlerinde görünen GoogleMap özellikleri bölümünde açıklanmıştır.
MapFragment.GetMapAsync yöntemi, parçası tarafından barındırılan öğesini başlatmak GoogleMap ve tarafından MapFragmentbarındırılan eşleme nesnesine başvuru almak için kullanılır. Bu yöntem, arabirimini uygulayan IOnMapReadyCallback bir nesne alır.
Bu arabirimin tek bir yöntemi vardır. Bu yöntem, IMapReadyCallback.OnMapReady(MapFragment map) uygulamanın nesneyle GoogleMap etkileşim kurması mümkün olduğunda çağrılacaktır. Aşağıdaki kod parçacığı, bir Android Etkinliğinin arabirimini nasıl başlatıp MapFragment uygulayabileceğini IOnMapReadyCallback gösterir:
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.
}
}
Eşleme türleri
Google Haritalar API'sinden beş farklı tür harita sağlanır:
Normal - Bu varsayılan eşleme türüdür. Yolları ve önemli doğal özelliklerin yanı sıra bazı yapay ilgi çekici noktaları (binalar ve köprüler gibi) gösterir.
Uydu - Bu harita, uydu fotoğrafçılığı gösterir.
Hibrit - Bu harita, uydu fotoğrafçılığı ve yol haritalarını gösterir.
Arazi - Bu öncelikle bazı yollarda topografik özellikleri gösterir.
Yok - Bu harita hiçbir kutucuk yüklemez, boş bir kılavuz olarak işlenir.
Aşağıdaki görüntüde, soldan sağa (normal, hibrit, arazi) farklı harita türlerinden üçü gösterilmektedir:
GoogleMap.MapType özelliği, hangi eşleme türünün görüntüleneceğini ayarlamak veya değiştirmek için kullanılır. Aşağıdaki kod parçacığında bir uydu haritasının nasıl görüntüleneceği gösterilmektedir.
public void OnMapReady(GoogleMap map)
{
map.MapType = GoogleMap.MapTypeHybrid;
}
GoogleMap özellikleri
GoogleMap , işlevselliğini ve haritanın görünümünü denetleyebilen çeşitli özellikleri tanımlar. öğesinin ilk durumunu GoogleMap yapılandırmanın bir yolu, oluştururken MapFragmentbir GoogleMapOptions nesnesi geçirmektir. Aşağıdaki kod parçacığı, oluştururken MapFragmentnesne GoogleMapOptions kullanmanın bir örneğidir:
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();
yapılandırmanın GoogleMap diğer yolu, eşleme nesnesinin Ui Ayarlar üzerindeki özellikleri düzenlemektir. Sonraki kod örneğinde yakınlaştırma denetimlerini ve pusulayı görüntülemek için nasıl yapılandırılır GoogleMap gösterilmektedir:
public void OnMapReady(GoogleMap map)
{
map.UiSettings.ZoomControlsEnabled = true;
map.UiSettings.CompassEnabled = true;
}
GoogleMap ile etkileşim kurma
Android Haritalar API'sinde Bir Etkinliğin bakış açısını değiştirmesine, işaretçi eklemesine, özel yer paylaşımları yerleştirmesine veya geometrik şekiller çizmesine olanak sağlayan API'ler sağlanır. Bu bölümde, Xamarin.Android'de bu görevlerden bazılarının nasıl yerine getirileceği açıklanır.
Görünüm Noktasını Değiştirme
Haritalar Mercator projeksiyonu temel alınarak ekranda düz bir düzlem olarak modellenir. Harita görünümü, doğrudan bu düzleme bakan bir kameranın görünümüdür. Kameranın konumu konum, yakınlaştırma, eğme ve yatak değiştirilerek kontrol edilebilir. Kamera Update sınıfı, kamera konumunu taşımak için kullanılır. CameraUpdatenesneleri doğrudan örneklenmez, bunun yerine Haritalar API'sinde Kamera UpdateFactory sınıfı sağlanır.
Bir CameraUpdate nesne oluşturulduktan sonra, GoogleMap.Move Kamera veya GoogleMap.Animate Kamera yöntemlerine parametre olarak geçirilir. MoveCamera yöntemi sorunsuz, animasyonlu bir geçiş sağlarken, yöntem haritayı AnimateCamera anında güncelleştirir.
Bu kod parçacığı, haritanın yakınlaştırma düzeyini bir yakınlaştırma düzeyi artıracak bir CameraUpdate oluşturmak için öğesinin nasıl kullanılacağını CameraUpdateFactory gösteren basit bir örnektir:
MapFragment mapFrag = (MapFragment) FragmentManager.FindFragmentById(Resource.Id.my_mapfragment_container);
mapFrag.GetMapAsync(this);
...
public void OnMapReady(GoogleMap map)
{
map.MoveCamera(CameraUpdateFactory.ZoomIn());
}
Haritalar API'sinde kamera konumu için tüm olası değerleri toplayan bir Kamera Position sağlanır. Bu sınıfın bir örneği, nesne CameraUpdate döndürecek Kamera UpdateFactory.New Kamera Position yöntemine sağlanabilir. Haritalar API'sinde nesneleri oluşturmak CameraPosition için akıcı bir API sağlayan Kamera Position.Builder sınıfı da bulunur.
Aşağıdaki kod parçacığında bir öğesinden CameraPosition oluşturma CameraUpdate ve bunu kullanarak üzerindeki kamera konumunu GoogleMapdeğiştirme örneği gösterilmektedir:
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);
}
Önceki kod parçacığında, haritadaki belirli bir konum LatLng sınıfıyla temsil edilir. Yakınlaştırma düzeyi, Google Haritalar tarafından kullanılan rastgele bir yakınlaştırma ölçüsü olan 18'e ayarlanır. Rulman, kuzeyden saat yönünde pusula ölçümüdür. Tilt özelliği görüntüleme açısını denetler ve dikeyden 25 derecelik bir açı belirtir. Aşağıdaki ekran görüntüsünde GoogleMap , yukarıdaki kod yürütüldikten sonra gösterilmektedir:
Harita üzerinde çizim
Android Haritalar API'leri, harita üzerinde aşağıdaki öğeleri çizmeye yönelik API'ler sağlar:
İşaretçiler - Bunlar, haritada tek bir konumu tanımlamak için kullanılan özel simgelerdir.
Yer Paylaşımları - Bu, haritadaki konum veya alan koleksiyonunu tanımlamak için kullanılabilecek bir görüntüdür.
Çizgiler, Çokgenler ve Daireler - Etkinlikler'in haritaya şekil eklemesine olanak sağlayan API'lerdir.
İşaretleyiciler
Haritalar API'sinde, bir haritadaki tek bir konumla ilgili tüm verileri kapsülleyen bir Marker sınıfı sağlanır. Marker sınıfı varsayılan olarak Google Haritalar tarafından sağlanan standart bir simge kullanır. İşaretçinin görünümünü özelleştirmek ve kullanıcı tıklamalarına yanıt vermek mümkündür.
İşaretçi Ekleme
Haritaya işaretçi eklemek için yeni bir MarkerOptions nesnesi oluşturmanız ve ardından örnekte GoogleMap AddMarker yöntemini çağırması gerekir. Bu yöntem bir marker nesnesi döndürür.
public void OnMapReady(GoogleMap map)
{
MarkerOptions markerOpt1 = new MarkerOptions();
markerOpt1.SetPosition(new LatLng(50.379444, 2.773611));
markerOpt1.SetTitle("Vimy Ridge");
map.AddMarker(markerOpt1);
}
kullanıcı işaretçiye dokunduğunda, işaretçinin başlığı bir bilgi penceresinde görüntülenir. Aşağıdaki ekran görüntüsünde bu işaretçinin nasıl göründüğü gösterilmektedir:
İşaretçiyi özelleştirme
İşaretçiyi haritaya eklerken yöntemini çağırarak MarkerOptions.InvokeIcon işaretçi tarafından kullanılan simgeyi özelleştirmek mümkündür.
Bu yöntem, simgeyi işlemek için gerekli verileri içeren bir BitmapDescriptor nesnesi alır. BitmapDescriptorFactory sınıfı, bir BitmapDescriptoroluşturulmasını basitleştirmek için bazı yardımcı yöntemler sağlar. Aşağıdaki listede bu yöntemlerden bazıları tanıtabilirsiniz:
DefaultMarker(float colour)– Varsayılan Google Haritalar işaretçisini kullanın, ancak rengi değiştirin.FromAsset(string assetName)– Varlıklar klasöründe belirtilen dosyadan özel bir simge kullanın.FromBitmap(Bitmap image)– Simge olarak belirtilen bit eşlemi kullanın.FromFile(string fileName)– Belirtilen yolda dosyadan özel simgeyi oluşturun.FromResource(int resourceId)– Belirtilen kaynaktan özel bir simge oluşturun.
Aşağıdaki kod parçacığında, mavi renkli varsayılan işaretçi oluşturma örneği gösterilmektedir:
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);
}
Bilgi pencereleri
Bilgi pencereleri , belirli bir işaretçiye dokunduğunda kullanıcıya bilgi görüntülemek için açılan özel pencerelerdir. Varsayılan olarak, bilgi penceresi işaretçinin başlığının içeriğini görüntüler. Başlık atanmamışsa hiçbir bilgi penceresi görüntülenmez. Aynı anda yalnızca bir bilgi penceresi gösterilebilir.
GoogleMap.IInfoWindowAdapter arabirimini uygulayarak bilgi penceresini özelleştirmek mümkündür. Bu arabirimde iki önemli yöntem vardır:
public View GetInfoWindow(Marker marker)– İşaretçi için özel bilgi penceresi almak için bu yöntem çağrılır. döndürürsenull, varsayılan pencere işleme kullanılır. Bu yöntem bir Görünüm döndürürse, bu Görünüm bilgi penceresi çerçevesinin içine yerleştirilir.public View GetInfoContents(Marker marker)– Bu yöntem yalnızca GetInfoWindow döndürürse çağrılırnull. Bilgi penceresi içeriğinin varsayılan işlemesi kullanılacaksa bu yöntem birnulldeğer döndürebilir. Aksi takdirde, bu yöntem bilgi penceresinin içeriğini içeren bir Görünüm döndürmelidir.
Bilgi penceresi canlı bir görünüm değildir. Bunun yerine Android, Görünümü statik bit eşlem olarak dönüştürür ve görüntüde görüntüler. Bu, bir bilgi penceresinin hiçbir dokunma olayına veya hareketine yanıt veremeyeceği ve otomatik olarak güncelleştirilemeyeceği anlamına gelir. Bir bilgi penceresini güncelleştirmek için GoogleMap.ShowInfoWindow yöntemini çağırmak gerekir.
Aşağıdaki görüntüde bazı özelleştirilmiş bilgi pencerelerinin örnekleri gösterilmektedir. Soldaki görüntünün içeriği özelleştirilmişken, sağdaki görüntünün penceresi ve içeriği yuvarlatılmış köşelerle özelleştirilmiş:

GroundOverlays
Haritadaki belirli bir konumu tanımlayan işaretçilerden farklı olarak GroundOverlay , bir konum koleksiyonunu veya haritadaki bir alanı tanımlamak için kullanılan bir görüntüdür.
GroundOverlay ekleme
Haritaya yer kaplaması eklemek, haritaya işaretçi eklemeye benzer. İlk olarak, bir GroundOverlayOptions nesnesi oluşturulur. Bu nesne daha sonra yöntemine GoogleMap.AddGroundOverlay parametre olarak geçirilir ve bu da bir GroundOverlay nesne döndürür. Bu kod parçacığı, haritaya yer katmanı ekleme örneğidir:
BitmapDescriptor image = BitmapDescriptorFactory.FromResource(Resource.Drawable.polarbear);
GroundOverlayOptions groundOverlayOptions = new GroundOverlayOptions()
.Position(position, 150, 200)
.InvokeImage(image);
GroundOverlay myOverlay = googleMap.AddGroundOverlay(groundOverlayOptions);
Aşağıdaki ekran görüntüsünde haritada bu katman gösterilmektedir:
Çizgiler, Daireler ve Çokgenler
Haritaya eklenebilecek üç basit geometrik şekil türü vardır:
Polyline - Bu bir dizi bağlı çizgi kesimidir. Haritadaki bir yolu işaretleyebilir veya geometrik şekil oluşturabilir.
Daire - Bu, harita üzerinde bir daire çizer.
Çokgen - Bu, haritadaki alanları işaretlemek için kapalı bir şekildir.
Polylines
Çok çizgi, her satır kesiminin köşelerini belirten ardışık LatLng nesnelerin listesidir. Bir çok çizgi, önce bir PolylineOptions nesne oluşturulup noktalar eklenerek oluşturulur. Nesne PolylineOption daha sonra yöntemi çağrılarak bir GoogleMap nesneye AddPolyline geçirilir.
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);
Daire
Daireler, önce dairenin merkezini ve yarıçapını metreler halinde belirten bir CircleOption nesnesinin örneği oluşturularak oluşturulur. Daire, GoogleMap.AddCircle çağrılarak harita üzerinde çizilir. Aşağıdaki kod parçacığında daire çizme gösterilmektedir:
CircleOptions circleOptions = new CircleOptions ();
circleOptions.InvokeCenter (new LatLng(37.4, -122.1));
circleOptions.InvokeRadius (1000);
googleMap.AddCircle (circleOptions);
Çokgen
Polygons, s'ye Polylinebenzer, ancak açık uçlu değildir. Polygons kapalı bir döngü ve iç doldurulmuş vardır. Polygons, GoogleMap.AddPolygon yöntemi çağrılır dışında, ile Polylinetam olarak aynı şekilde oluşturulur.
'nin Polylineaksine, a Polygon kendi kendine kapanıyor. İlk ve son noktaları bağlayan bir çizgi çizilerek çokgen yöntemiyle AddPolygon kapatılır. Aşağıdaki kod parçacığı, örnekteki önceki kod Polyline parçacığıyla aynı alan üzerinde düz bir dikdörtgen oluşturur.
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);
Kullanıcı olaylarını yanıtlama
Bir kullanıcının haritayla üç tür etkileşimi olabilir:
İşaretçi Tıklaması - Kullanıcı bir işaretçiye tıklar.
İşaretçi Sürükleme - Kullanıcı bir mparger'a uzun tıklama yapmış
Bilgi Penceresi Tıklayın - Kullanıcı bir bilgi penceresine tıkladı.
Bu olayların her biri aşağıda daha ayrıntılı olarak ele alınacaktır.
İşaretçi tıklama olayları
Olay MarkerClicked , kullanıcı bir işaretçiye dokunduğunda oluşturulur. Bu olay bir GoogleMap.MarkerClickEventArgs nesneyi parametre olarak kabul eder. Bu sınıf iki özellik içerir:
GoogleMap.MarkerClickEventArgs.Handled– Bu özellik, olay işleyicisinin olayı tüketmiş olduğunu belirtmek için olarak ayarlanmalıdırtrue. Bu ayarlıysafalse, olay işleyicisinin özel davranışına ek olarak varsayılan davranış da gerçekleşir.Marker– Bu özellik, olayı tetikleyen işaretçiye birMarkerClickbaşvurudur.
Bu kod parçacığı, kamera konumunu haritada yeni bir konuma değiştirecek bir örnek MarkerClick gösterir:
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();
}
}
İşaretçi Sürükleme olayları
Bu olay, kullanıcı işaretçiyi sürüklemek istediğinde oluşturulur. Varsayılan olarak, işaretçiler sürüklenebilir değildir. bir işaretçi, özelliği olarak ayarlanarak Marker.Draggable veya yöntemi true parametresi olarak çağrılarak sürüklenebilir MarkerOptions.Draggable olarak ayarlanabilir.true
İşaretçiyi sürüklemek için, kullanıcının önce işaretçiye uzun tıklaması ve ardından parmağı haritada kalması gerekir. Kullanıcının parmağı ekranda sürüklendiğinde işaretçi hareket eder. Kullanıcının parmağı ekrandan kaldırıldığında işaretçi yerinde kalır.
Aşağıdaki listede sürüklenebilir bir işaretçi için tetiklenecek çeşitli olaylar açıklanmaktadır:
GoogleMap.MarkerDragStart(object sender, GoogleMap.MarkerDragStartEventArgs e)– Kullanıcı işaretçiyi ilk kez sürüklediğinde bu olay tetikleniyor.GoogleMap.MarkerDrag(object sender, GoogleMap.MarkerDragEventArgs e)– İşaretçi sürüklendiği için bu olay tetiklenir.GoogleMap.MarkerDragEnd(object sender, GoogleMap.MarkerDragEndEventArgs e)– Kullanıcı işaretçiyi sürüklemeyi bitirdiğinde bu olay tetikleniyor.
her biri, sürüklenen EventArgs nesneye Marker başvuru olan adlı P0 tek bir özellik içerir.
Bilgi Penceresi Olaylar'a tıklayın
Aynı anda yalnızca bir bilgi penceresi görüntülenebilir. Kullanıcı bir haritadaki bilgi penceresine tıkladığında, eşleme nesnesi bir InfoWindowClick olay oluşturur. Aşağıdaki kod parçacığında bir işleyicinin olaya nasıl bağlanacakları gösterilmektedir:
public void OnMapReady(GoogleMap map)
{
map.InfoWindowClick += MapOnInfoWindowClick;
}
private void MapOnInfoWindowClick (object sender, GoogleMap.InfoWindowClickEventArgs e)
{
Marker myMarker = e.Marker;
// Do something with marker.
}
Bilgi penceresinin View , haritada görüntü olarak işlenen statik bir pencere olduğunu hatırlayın. Bilgi penceresinin içine yerleştirilen düğmeler, onay kutuları veya metin görünümleri gibi tüm pencere öğeleri eylemsiz olur ve tüm integral kullanıcı olaylarına yanıt veremez.





