İşaretçiler harita üzerinde tek konumları belirtir. Varsayılan rengi değiştirerek veya işaretçi simgesini özel bir resimle değiştirerek işaretçilerinizi özelleştirebilirsiniz. Bilgi pencereleri, işaretçilere ek bağlam sağlayabilir.
Kod örnekleri
GitHub'daki ApiDemos deposu çeşitli işaretçi özelliklerini gösteren bir örnek içerir:
Java
- MapWithMarker: İşaretçi içeren basit bir harita. İşaretçi içeren bir harita ekleme hakkındaki eğitici içeriği inceleyin.
- MarkerDemoActivity: Bir haritadaki seçenekleri ve dinleyicileri içeren işaretçileri kullanma
Kotin
- MapWithMarker: İşaretçi içeren basit bir harita. İşaretçi kt içeren harita ekleme ile ilgili eğiticiye bakın.
- MarkerDemoActivity: Bir haritadaki seçenekleri ve dinleyicileri içeren işaretçileri kullanma
Giriş
İşaretçiler haritada konumları tanımlar. Varsayılan işaret, Google Haritalar'ın görünüm ve tarzında sık kullanılan
standart bir simge kullanır. Simgenin rengi, resmi veya sabit noktası API aracılığıyla değiştirilebilir. İşaretçiler Marker
türündeki nesnelerdir ve GoogleMap.addMarker(markerOptions)
yöntemiyle haritaya eklenir.
İşaretçiler etkileşimli olacak şekilde tasarlanmıştır. Bunlar, varsayılan olarak click
etkinlikleri alır ve genellikle bilgi pencereleri açmak için etkinlik işleyicilerle kullanılır. İşaretçinin draggable
özelliğinin true
olarak ayarlanması, kullanıcının işaretçinin konumunu değiştirmesine olanak tanır. İşaretçiyi taşıma özelliğini etkinleştirmek için uzun basın.
Varsayılan olarak, bir kullanıcı bir işaretçiye dokunduğunda haritanın sağ alt kısmında görünen harita araç çubuğu, kullanıcının Google Haritalar mobil uygulamasına hızlı bir şekilde erişmesini sağlar. Araç çubuğunu devre dışı bırakabilirsiniz. Daha fazla bilgi için kontrol kılavuzuna bakın.
İşaretçileri kullanmaya başlama
Maps Live'ın bu bölümünde, Android için Haritalar SDK'sı kullanılarak haritanıza işaretçiler eklemeyle ilgili temel bilgiler verilmektedir.
İşaretçi ekleyin
Aşağıdaki örnekte, bir haritaya nasıl işaretleyici ekleneceği gösterilmektedir. İşaretçi, -33.852,151.211
koordinatlarında (Sidney, Avustralya) oluşturulur ve tıklandığında bir bilgi penceresinde "Sidney'de İşaretçi" dizesini gösterir.
Java
@Override public void onMapReady(GoogleMap googleMap) { // Add a marker in Sydney, Australia, // and move the map's camera to the same location. LatLng sydney = new LatLng(-33.852, 151.211); googleMap.addMarker(new MarkerOptions() .position(sydney) .title("Marker in Sydney")); googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); }
Kotlin
override fun onMapReady(googleMap: GoogleMap) { // Add a marker in Sydney, Australia, // and move the map's camera to the same location. val sydney = LatLng(-33.852, 151.211) googleMap.addMarker( MarkerOptions() .position(sydney) .title("Marker in Sydney") ) googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)) }
İşaretçi hakkında ek bilgi görüntüleme
Yaygın olarak kullanılan bir gereksinim, kullanıcı haritadaki bir işaretleyiciye dokunduğunda bir yer veya konum hakkında ek bilgi göstermektir. Bilgi pencereleri ile ilgili kılavuza bakın.
Verileri bir işaretçiyle ilişkilendirin
Marker.setTag()
kullanarak rastgele veri nesnelerini bir işaretçiyle depolayabilir ve Marker.getTag()
kullanarak veri nesnesini alabilirsiniz. Aşağıdaki örnek, etiketleri kullanarak bir işaretçinin kaç kez tıklandığını nasıl sayabileceğinizi gösterir:
Java
/** * A demo class that stores and retrieves data objects with each marker. */ public class MarkerDemoActivity extends AppCompatActivity implements GoogleMap.OnMarkerClickListener, OnMapReadyCallback { private final LatLng PERTH = new LatLng(-31.952854, 115.857342); private final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); private final LatLng BRISBANE = new LatLng(-27.47093, 153.0235); private Marker markerPerth; private Marker markerSydney; private Marker markerBrisbane; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_markers); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } /** Called when the map is ready. */ @Override public void onMapReady(GoogleMap map) { // Add some markers to the map, and add a data object to each marker. markerPerth = map.addMarker(new MarkerOptions() .position(PERTH) .title("Perth")); markerPerth.setTag(0); markerSydney = map.addMarker(new MarkerOptions() .position(SYDNEY) .title("Sydney")); markerSydney.setTag(0); markerBrisbane = map.addMarker(new MarkerOptions() .position(BRISBANE) .title("Brisbane")); markerBrisbane.setTag(0); // Set a listener for marker click. map.setOnMarkerClickListener(this); } /** Called when the user clicks a marker. */ @Override public boolean onMarkerClick(final Marker marker) { // Retrieve the data from the marker. Integer clickCount = (Integer) marker.getTag(); // Check if a click count was set, then display the click count. if (clickCount != null) { clickCount = clickCount + 1; marker.setTag(clickCount); Toast.makeText(this, marker.getTitle() + " has been clicked " + clickCount + " times.", Toast.LENGTH_SHORT).show(); } // Return false to indicate that we have not consumed the event and that we wish // for the default behavior to occur (which is for the camera to move such that the // marker is centered and for the marker's info window to open, if it has one). return false; } }
Kotlin
/** * A demo class that stores and retrieves data objects with each marker. */ class MarkerDemoActivity : AppCompatActivity(), OnMarkerClickListener, OnMapReadyCallback { private val PERTH = LatLng(-31.952854, 115.857342) private val SYDNEY = LatLng(-33.87365, 151.20689) private val BRISBANE = LatLng(-27.47093, 153.0235) private var markerPerth: Marker? = null private var markerSydney: Marker? = null private var markerBrisbane: Marker? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_markers) val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment? mapFragment!!.getMapAsync(this) } /** Called when the map is ready. */ override fun onMapReady(map: GoogleMap) { // Add some markers to the map, and add a data object to each marker. markerPerth = map.addMarker( MarkerOptions() .position(PERTH) .title("Perth") ) markerPerth?.tag = 0 markerSydney = map.addMarker( MarkerOptions() .position(SYDNEY) .title("Sydney") ) markerSydney?.tag = 0 markerBrisbane = map.addMarker( MarkerOptions() .position(BRISBANE) .title("Brisbane") ) markerBrisbane?.tag = 0 // Set a listener for marker click. map.setOnMarkerClickListener(this) } /** Called when the user clicks a marker. */ override fun onMarkerClick(marker: Marker): Boolean { // Retrieve the data from the marker. val clickCount = marker.tag as? Int // Check if a click count was set, then display the click count. clickCount?.let { val newClickCount = it + 1 marker.tag = newClickCount Toast.makeText( this, "${marker.title} has been clicked $newClickCount times.", Toast.LENGTH_SHORT ).show() } // Return false to indicate that we have not consumed the event and that we wish // for the default behavior to occur (which is for the camera to move such that the // marker is centered and for the marker's info window to open, if it has one). return false } }
İşaretçilerle verileri depolamanın ve almanın yararlı olduğu bazı örnek senaryoları aşağıda bulabilirsiniz:
- Uygulamanız farklı işaretçi türlerine hitap edebilir ve kullanıcı bu işaretçileri tıkladığında farklı şekilde davranmak istersiniz. Bunun için türü belirten işaretçiyle bir
String
depolayabilirsiniz. - Benzersiz kayıt tanımlayıcılarına sahip bir sistemle karşılaşıyor olabilirsiniz. Bu sistemde işaretçiler, söz konusu sistemdeki belirli kayıtları temsil eder.
- İşaretçi verileri, bir işaretçinin z-endeksine karar verirken kullanılacak önceliği gösterebilir.
İşaretçiyi sürüklenebilir yap
draggable
özelliği true
olarak ayarlandığı sürece,
bir işaretçiyi haritaya ekledikten sonra yeniden konumlandırabilirsiniz. Sürüklemeyi etkinleştirmek için işaretçiye uzun basın. Parmağınızı ekrandan çıkardığınızda, işaretçi
bu pozisyonda kalır.
İşaretçiler varsayılan olarak sürüklenemez. İşaretçiyi haritaya eklemeden önce MarkerOptions.draggable(boolean)
veya haritaya eklendikten sonra Marker.setDraggable(boolean)
ile açık bir şekilde ayarlamanız gerekir.
İşaretçi sürükleme etkinlikleri bölümünde açıklandığı gibi, işaretçideki sürükleme etkinliklerini dinleyebilirsiniz.
Aşağıdaki snippet, Avustralya'nın Perth şehrinde sürüklenebilir bir işaretçi ekler.
Java
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .draggable(true));
Kotlin
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .draggable(true) )
İşaretçiyi özelleştirme
Bu videoda, konumları harita üzerinde görselleştirmek için işaretçi kullanma yolları gösterilmektedir.
İşaretçiler, varsayılan simge yerine gösterilecek özel bir resim tanımlayabilir. Bir simgenin tanımlanması, işaretçinin görsel davranışını etkileyen bir dizi özelliğin ayarlanmasını içerir.
İşaretçiler, aşağıdaki özellikler aracılığıyla özelleştirmeyi destekler:
- Konum (Zorunlu)
- İşaretçinin haritadaki konumu için
LatLng
değeri. BirMarker
nesnesi için gereken tek özellik budur. - Çapa
- Resimde, işaretçinin EnlLng konumuna yerleştirilecek nokta. Bu, varsayılan olarak resmin alt kısmının ortasına denk gelir.
- Alfa
- İşaretçinin opaklığını ayarlar. Varsayılan olarak 1,0 değerine ayarlanır.
- Başlık
- Kullanıcı işaretçiye dokunduğunda bilgi penceresinde gösterilen bir dize.
- Snippet
- Başlığın altında görüntülenen ek metin.
- Simge
- Varsayılan işaretçi resmi yerine görüntülenen bit eşlem.
- Sürüklenebilir
- Kullanıcının işaretçiyi taşımasına izin vermek istiyorsanız
true
olarak ayarlayın. Varsayılan olarakfalse
değerine ayarlanır. - Gösteriliyor
- İşaretçiyi görünmez yapmak için
false
olarak ayarlayın. Varsayılan olaraktrue
değerine ayarlanır. - Düz veya İlan Tahtası yönü
- Varsayılan olarak, işaretçiler ilan tahtası yönünü kullanır. Diğer bir deyişle, işaretçiler harita yüzeyine değil, cihaz ekranına dayalı olarak çizilir. Haritayı döndürmek, eğmek veya yakınlaştırmak, işaretçinin yönünü değiştirmez. Bir işaretçinin yönünü dünyaya göre düz olacak şekilde ayarlayabilirsiniz. Düz işaretçiler, harita döndürüldüğünde ve harita yatırıldığında perspektifi değiştirir. İlan tahtası işaretçilerinde olduğu gibi düz harita, harita yakınlaştırıldığında veya uzaklaştırıldığında boyutunu korur.
- Dönüş
- İşaretçinin saat yönünde derece cinsinden yönü. İşaretçi düzse varsayılan konum değişir. Düz bir işaretçinin varsayılan konumu kuzey doğrudur. İşaretçi düz olmadığında, varsayılan konum yukarıyı işaret eder ve döndürme, işaretçi her zaman kameraya bakacak şekilde yapılır.
Aşağıdaki snippet, varsayılan simgeyle basit bir işaretçi oluşturur.
Java
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation));
Kotlin
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) )
İşaretçi rengini özelleştirin
icon() yöntemine bir BitmapDescriptor
nesnesi ileterek varsayılan işaretçi resminin rengini özelleştirebilirsiniz. BitmapDescriptorFactory
nesnesinde önceden tanımlanmış bir renk grubu kullanabilir veya BitmapDescriptorFactory.defaultMarker(float hue)
yöntemiyle özel bir işaretçi rengi ayarlayabilirsiniz. Renk tonu, renk çemberindeki noktaları temsil eden 0 ile 360 arasında bir değerdir.
Java
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
Kotlin
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) )
İşaretçi opaklığını özelleştirin
MarkerOptions.alpha() yöntemiyle bir işaretçinin opaklığını kontrol edebilirsiniz. Alfa, 0,0 ile 1,0 arasında bir hareketli değer olarak belirtilmelidir. 0 tamamen şeffaf, 1 ise tamamen opaktır.
Java
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker(new MarkerOptions() .position(melbourneLocation) .alpha(0.7f));
Kotlin
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .alpha(0.7f) )
İşaretçi resmini özelleştirin
Varsayılan işaretçi resmini, genellikle simge olarak adlandırılan özel bir işaretçi resmiyle değiştirebilirsiniz. Özel simgeler her zaman BitmapDescriptor
olarak ayarlanır ve BitmapDescriptorFactory
sınıfındaki yöntemlerden biri kullanılarak tanımlanır.
fromAsset(String assetName)
- Öğeler dizinindeki bir Bit eşlem resminin adını kullanarak özel bir işaretçi oluşturur.
fromBitmap(Bitmap image)
- Bitmap görüntüsünden özel bir işaretçi oluşturur.
fromFile(String fileName)
- Dahili depolamada bulunan Bit eşlem resim dosyasının adını kullanarak özel bir simge oluşturur.
fromPath(String absolutePath)
- Bitmap görüntüsünün mutlak dosya yolundan özel bir işaretçi oluşturur.
fromResource(int resourceId)
- Bitmap görüntüsünün kaynak kimliğini kullanarak özel bir işaretçi oluşturur.
Aşağıdaki snippet'te özel simge bulunan bir işaretçi oluşturulur.
Java
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation) .title("Melbourne") .snippet("Population: 4,137,400") .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));
Kotlin
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .title("Melbourne") .snippet("Population: 4,137,400") .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)) )
İşaretçiyi düzleştirme
İşaretçi simgeleri normalde ekrana göre çizilir; haritayı döndürmek, eğmek veya yakınlaştırmak işaretçinin yönünü değiştirmez. Bir işaretçinin yönünü dünyaya göre düz olacak şekilde ayarlayabilirsiniz. Bu şekilde gösterilen işaretçiler, harita döndürüldüğünde döner ve harita yatırıldığında perspektifi değiştirir. Harita yakınlaştırıldığında veya uzaklaştırıldığında düz işaretçilerin boyutu korunur.
İşaretçinin yönünü değiştirmek için işaretçinin flat
özelliğini
true
olarak ayarlayın.
Java
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .flat(true));
Kotlin
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .flat(true) )
İşaretçiyi döndürme
Bir işaretçiyi Marker
ile bağlantı noktasının etrafında döndürebilirsiniz.setRotation()
yöntemi. Rotasyon, varsayılan konumdan saat yönünde derece cinsinden ölçülür. İşaretçi haritada düz olduğunda, varsayılan konum
Kuzey'dir. İşaretçi düz olmadığında, varsayılan konum yukarıyı işaret eder ve döndürme, işaretçi her zaman kameraya bakacak şekilde yapılır.
Aşağıdaki örnek, işaretçiyi 90° döndürmektedir. Sabitleme noktası 0.5,0.5
olarak ayarlanırsa işaretçinin tabanı yerine merkezi etrafında döndürülmesine neden olur.
Java
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .anchor(0.5f,0.5f) .rotation(90.0f));
Kotlin
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .anchor(0.5f, 0.5f) .rotation(90.0f) )
İşaretçi z-endeksi
Z-endeksi, bu işaretçinin haritadaki diğer işaretçilere kıyasla yığın sırasını belirtir. Yüksek Z-endeksine sahip bir işaretçi, daha düşük Z-endeksine sahip işaretçilerin üzerine çizilir. Varsayılan Z-endeksi değeri: 0
.
Aşağıdaki kod snippet'inde gösterildiği gibi MarkerOptions.zIndex()
çağrısı yaparak işaretçinin seçenekler nesnesinde z endeksini ayarlayın:
Java
map.addMarker(new MarkerOptions() .position(new LatLng(10, 10)) .title("Marker z1") .zIndex(1.0f));
Kotlin
map.addMarker( MarkerOptions() .position(LatLng(10.0, 10.0)) .title("Marker z1") .zIndex(1.0f) )
Marker.getZIndex()
için arama yaparak işaretçinin Z-endeksine erişebilir ve bunu Marker.setZIndex()
çağrısı yaparak değiştirebilirsiniz.
İşaretçiler, diğer yer paylaşımlarının z-endeksinden bağımsız olarak, her zaman karo katmanlarının ve diğer işaretçi olmayan yer paylaşımlarının (yer paylaşımları, çoklu çizgiler, poligonlar ve diğer şekiller) üzerinde çizilir. İşaretçilerin diğer yer paylaşımlarına kıyasla ayrı bir Z-endeksi grubunda olduğu kabul edilir.
Aşağıdaki Z-endeksinin tıklama etkinlikleri üzerindeki etkisi hakkında bilgi edinin.
İşaretçi etkinliklerini işleme
Maps API, işaretçi etkinliklerini dinlemenize ve bunlara yanıt vermenize olanak tanır. Bu etkinlikleri dinlemek için işaretçilerin ait olduğu GoogleMap
nesnesinde ilgili dinleyiciyi ayarlamanız gerekir. Etkinlik haritadaki işaretleyicilerden birinde gerçekleştiğinde, dinleyicinin geri çağırma işlemi, parametre olarak iletilen karşılık gelen Marker
nesnesiyle çağrılır. Bu Marker
nesnesini kendi referansınızla bir Marker
nesnesiyle karşılaştırmak için ==
yerine equals()
kullanmanız gerekir.
Aşağıdaki etkinlikleri dinleyebilirsiniz:
İşaretçi tıklama etkinlikleri
İşaretçideki tıklama etkinliklerini dinlemek için bir OnMarkerClickListener
kullanabilirsiniz. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)
numaralı telefonu arayın. Kullanıcı bir işaretçiyi tıkladığında onMarkerClick(Marker)
çağrılır ve işaretçi bir bağımsız değişken olarak iletilir. Bu yöntem, etkinliği kullanıp kullanmadığınızı gösteren bir boole değeri döndürür (ör. varsayılan davranışın yerine getirilmesini istediğinizi). false
değerini döndürürse varsayılan davranışınız özel davranışınıza ek olarak gerçekleşir. İşaretçi tıklama etkinliğinin varsayılan davranışı, bilgi penceresinin gösterilmesidir (varsa) ve kamerayı işaretleyicinin merkezini ortalayacak şekilde hareket ettirmektir.
Z-endeksinin tıklama etkinlikleri üzerindeki etkisi:
- Kullanıcı bir dizi işaretçiyi tıkladığında, tıklama etkinliği en yüksek Z-endeksine sahip işaretçi için tetiklenir.
- Tıklama başına en fazla bir etkinlik tetiklenir. Diğer bir deyişle, tıklama işaretçilere veya daha düşük z-endeksi değerlerine sahip diğer yer paylaşımlarına aktarılmaz.
- İşaretçilerden oluşan bir kümeye tıkladığınızda, her bir tıklama sırayla sırayla yuvarlanarak her bir kümede geçiş yapılır. Döngünün sırası önce z-endeksine, ardından tıklama noktasına yakınlığa öncelik verir.
- Kullanıcı, kümenin yakınına tıklamazsa API, kümeyi yeniden hesaplar ve tıklama döngüsünün en baştan başlaması için sıfırlar.
- Tıklama etkinliği, döngü yeniden başlatılmadan önce işaretçi kümelerinden diğer şekillere ve yer paylaşımlarına geçer.
- İşaretçiler, diğer yer paylaşımlarının z-endeksinden bağımsız olarak, diğer yer paylaşımlarına veya şekillere (çoklu çizgiler, çokgenler, daireler ve/veya zemin döşemeleri) kıyasla etkin bir şekilde ayrı bir z-endeksi grubunda yer alır. Birden çok işaretçi, yer paylaşımı veya şekil üst üste konursa tıklama etkinliği ilk olarak işaretçiler grubu içinde döngülenir. Ardından, diğer z-endeksi değerlerine göre tıklanabilir olan diğer yer paylaşımları veya şekiller için tetiklenir.
İşaretçi sürükleme etkinlikleri
İşaretçi üzerinde sürükleme etkinliklerini dinlemek için bir OnMarkerDragListener
kullanabilirsiniz. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnMarkerDragListener
numaralı telefonu arayın. Kullanıcıların bir işaretçiyi sürüklemek için işaretçiye uzun basması gerekir. Kullanıcı, parmağınızı ekrandan
kaldırdığında işaretçi bu konumda kalır. Bir işaretçi sürüklendiğinde
onMarkerDragStart(Marker)
ilk olarak çağrılır. İşaretçi çekilirken, onMarkerDrag(Marker)
sürekli olarak çağrılır. Sürüklemenin sonunda onMarkerDragEnd(Marker)
çağrılır. İstediğiniz zaman Marker.getPosition()
numarasını arayarak işaretçinin konumunu görebilirsiniz.