मार्कर, मैप पर एक जगह को दिखाते हैं. डिफ़ॉल्ट रंग बदलकर या मार्कर आइकॉन को किसी कस्टम इमेज से बदलकर, अपने मार्कर को पसंद के मुताबिक बनाया जा सकता है. जानकारी विंडो किसी मार्कर के लिए ज़्यादा जानकारी उपलब्ध करा सकती हैं.
कोड सैंपल
GitHub पर ApiDemos डेटा स्टोर करने की जगह में, एक सैंपल शामिल है, जो अलग-अलग मार्कर सुविधाओं की जानकारी देता है:
Java
- MapWithMarker: एक मार्कर के साथ एक आसान मैप. मार्कर की मदद से मैप जोड़ने के बारे में ट्यूटोरियल देखें.
- MarkerDemoActivity: किसी मैप पर मार्कर का इस्तेमाल करना, जिसमें विकल्प और सुनने वाले लोग शामिल हैं
कोटलिन
- MapWithMarker: एक मार्कर के साथ एक आसान मैप. मार्कर-kt के साथ मैप जोड़ने के बारे में ट्यूटोरियल देखें.
- MarkerDemoActivity: किसी मैप पर मार्कर का इस्तेमाल करना, जिसमें विकल्प और सुनने वाले लोग शामिल हैं
शुरुआती जानकारी
मार्कर मैप पर जगहों की पहचान करते हैं. डिफ़ॉल्ट मार्कर एक मानक
आइकॉन का इस्तेमाल करता है, जो Google Maps के रंग-रूप में दिखता है. एपीआई के ज़रिए आइकॉन का रंग, इमेज या ऐंकर पॉइंट बदला जा सकता है. मार्कर, Marker
टाइप के ऑब्जेक्ट होते हैं और उन्हें मैप में
GoogleMap.addMarker(markerOptions)
तरीके से जोड़ा जाता है.
मार्कर को इंटरैक्टिव बनाने के लिए डिज़ाइन किया गया है. उन्हें डिफ़ॉल्ट रूप से click
इवेंट मिलते हैं. इनका इस्तेमाल अक्सर, इवेंट लिसनर के साथ जानकारी विंडो लाने के लिए किया जाता है. मार्कर की draggable
प्रॉपर्टी को true
पर सेट करने से, उपयोगकर्ता मार्कर की जगह बदल सकता है. मार्कर को इधर-उधर ले जाने की
सुविधा चालू करने के लिए, इसे दबाकर रखें.
डिफ़ॉल्ट रूप से, जब कोई उपयोगकर्ता किसी मार्कर पर टैप करता है, तो मैप के सबसे नीचे दाईं ओर मैप टूलबार दिखता है. इससे उपयोगकर्ता को Google Maps मोबाइल ऐप्लिकेशन का तुरंत ऐक्सेस मिल जाता है. आपके पास टूलबार को बंद करने का विकल्प होता है. ज़्यादा जानकारी के लिए, कंट्रोल के लिए गाइड देखें.
मार्कर के साथ शुरू करना
Maps लाइव के इस एपिसोड में Android के लिए Maps SDK टूल का इस्तेमाल करके अपने मैप पर मार्कर जोड़ने की बुनियादी बातें बताई गई हैं.
कोई मार्कर जोड़ें
नीचे दिए गए उदाहरण में मैप पर मार्कर जोड़ने का तरीका बताया गया है. यह मार्कर, -33.852,151.211
(सिडनी, ऑस्ट्रेलिया) कोऑर्डिनेट पर बनाया जाता है. साथ ही, इस पर क्लिक करने पर, जानकारी विंडो में 'सिडनी में मार्कर' स्ट्रिंग दिखती है.
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)) }
किसी मार्कर के बारे में ज़्यादा जानकारी दिखाएं
जब उपयोगकर्ता मैप पर किसी मार्कर को टैप करता है, तब उस जगह या जगह के बारे में ज़्यादा जानकारी दिखाना एक सामान्य शर्त है. जानकारी विंडो की गाइड देखें.
डेटा को मार्कर से जोड़ें
Marker.setTag()
का इस्तेमाल करके, मार्कर के साथ कोई आर्बिट्रेरी डेटा ऑब्जेक्ट स्टोर किया जा सकता है.
साथ ही, Marker.getTag()
का इस्तेमाल करके डेटा ऑब्जेक्ट वापस पाया जा सकता है. नीचे दिया गया नमूना दिखाता है कि टैग का इस्तेमाल करके मार्कर को क्लिक किए जाने की संख्या की गिनती कैसे की जा सकती है:
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 } }
यहां उन स्थितियों के कुछ उदाहरण दिए गए हैं जब मार्कर के साथ डेटा को स्टोर और वापस पाना उपयोगी होता है:
- हो सकता है कि आपके ऐप्लिकेशन में अलग-अलग तरह के मार्कर हों और जब उपयोगकर्ता उन पर क्लिक करे, तो आप उन्हें अलग तरह से दिखाना चाहें. ऐसा करने के लिए, आपके पास
String
को सेव करने का विकल्प होता है. इसमें, टाइप के बारे में बताने वाले मार्कर का इस्तेमाल किया जाता है. - आपको शायद किसी ऐसे सिस्टम से इंटरैक्ट करना पड़ रहा हो जिसमें यूनीक रिकॉर्ड आइडेंटिफ़ायर होते हैं, जहां मार्कर उस सिस्टम में खास रिकॉर्ड दिखाते हैं.
- मार्कर डेटा किसी मार्कर का z-इंडेक्स तय करते समय इस्तेमाल की जाने वाली प्राथमिकता का संकेत दे सकता है.
मार्कर को ड्रैग करने लायक बनाएं
मैप में किसी मार्कर को जोड़ने के बाद, उसकी जगह बदली जा सकती है. हालांकि, इसके लिए ज़रूरी है कि draggable
प्रॉपर्टी true
पर सेट हो. ड्रैगिंग सक्षम करने के लिए मार्कर को देर तक दबाएं. जब आप अपनी उंगली को स्क्रीन से हटाते हैं, तो मार्कर उसी जगह पर बना रहेगा.
मार्कर को डिफ़ॉल्ट रूप से खींचा नहीं जा सकता. आपको मार्कर को मैप पर जोड़ने से पहले, MarkerOptions.draggable(boolean)
से ड्रैग करने लायक होने के लिए सेट करना होगा या मैप पर जोड़ने के बाद Marker.setDraggable(boolean)
सेट करना होगा.
मार्कर ड्रैग इवेंट में बताए गए तरीके से आप मार्कर पर ड्रैग इवेंट के लिए सुन सकते हैं.
नीचे दिया गया स्निपेट ऑस्ट्रेलिया के पर्थ में, खींचने लायक मार्कर जोड़ता है.
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) )
मार्कर को पसंद के मुताबिक बनाएं
इस वीडियो में, मैप पर जगहों को विज़ुअलाइज़ करने के लिए मार्कर का इस्तेमाल करने के तरीके बताए गए हैं.
मार्कर डिफ़ॉल्ट आइकॉन की जगह पर दिखाने के लिए पसंद के मुताबिक इमेज तय कर सकते हैं. आइकॉन तय करने में कई प्रॉपर्टी सेट करना शामिल होता है, जो मार्कर के विज़ुअल व्यवहार पर असर डालती है.
मार्कर की मदद से इन प्रॉपर्टी को पसंद के मुताबिक बनाया जा सकता है:
- पोज़िशन (ज़रूरी है)
- मैप पर मार्कर की जगह के लिए
LatLng
वैल्यू. किसीMarker
ऑब्जेक्ट के लिए, सिर्फ़ यह प्रॉपर्टी ज़रूरी है. - एंकर
- इमेज पर वह पॉइंट जिसे मार्कर की LatLng पोज़िशन पर रखा जाएगा. यह डिफ़ॉल्ट रूप से इमेज के निचले हिस्से के बीच में मौजूद होता है.
- ऐल्फ़ा
- मार्कर की ओपैसिटी को सेट करता है. डिफ़ॉल्ट वैल्यू 1.0 होती है.
- टाइटल
- यह स्ट्रिंग, जानकारी विंडो में तब दिखती है, जब उपयोगकर्ता मार्कर पर टैप करता है.
- स्निपेट
- शीर्षक के नीचे दिखाया जाने वाला अतिरिक्त लेख.
- आइकॉन
- एक बिटमैप, जो डिफ़ॉल्ट मार्कर इमेज की जगह दिखता है.
- खींचने और छोड़ने लायक
- अगर आप उपयोगकर्ता को मार्कर मूव करने की अनुमति देना चाहते हैं, तो
true
पर सेट करें. डिफ़ॉल्ट वैल्यूfalse
होती है. - दिख रहा है
- मार्कर को अदृश्य करने के लिए
false
पर सेट करें. डिफ़ॉल्ट तौर पर, यहtrue
पर सेट होती है. - फ़्लैट या बिलबोर्ड ओरिएंटेशन
- डिफ़ॉल्ट तौर पर मार्कर, बिलबोर्ड ओरिएंटेशन का इस्तेमाल करते हैं. इसका मतलब है कि उन्हें मैप की सतह के बजाय, डिवाइस की स्क्रीन पर दिखाया जाता है. मैप को घुमाने, झुकाने या ज़ूम करने से मार्कर की दिशा नहीं बदलती. आप मार्कर के ओरिएंटेशन को इस तरह सेट कर सकते हैं कि वह पृथ्वी पर सपाट रहे. जब मैप को घुमाया जाता है, तो फ़्लैट मार्कर घुमाते हैं और मैप के झुकाने पर ऐंगल बदलते हैं. बिलबोर्ड मार्कर की तरह ही, मैप को ज़ूम इन या ज़ूम आउट करने पर भी सपाट मार्कर अपना साइज़ बनाए रखते हैं.
- घुमाव
- मार्कर का ओरिएंटेशन, घड़ी की दिशा में डिग्री में बताया गया है. मार्कर के सपाट होने पर, डिफ़ॉल्ट जगह बदल जाती है. किसी सपाट मार्कर के लिए डिफ़ॉल्ट जगह, उत्तर दिशा में अलाइन होती है. जब मार्कर सपाट नहीं होता, तब डिफ़ॉल्ट पोज़िशन ऊपर की ओर होती है और घुमाव इस तरह होता है कि मार्कर हमेशा कैमरे की तरफ़ हो.
नीचे दिया गया स्निपेट, डिफ़ॉल्ट आइकॉन के साथ एक आसान मार्कर बनाता है.
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) )
मार्कर के रंग को पसंद के मुताबिक बनाएं
आइकॉन() वाले तरीके में BitmapDescriptor
ऑब्जेक्ट को पास करके, डिफ़ॉल्ट मार्कर इमेज के रंग को अपनी पसंद के मुताबिक बनाया जा सकता है. BitmapDescriptorFactory
ऑब्जेक्ट में, पहले से तय
रंगों के सेट का इस्तेमाल किया जा सकता है या
BitmapDescriptorFactory.defaultMarker(float hue)
तरीके का इस्तेमाल करके, कस्टम मार्कर कलर सेट किया जा सकता है. ह्यू 0 से 360 के बीच की वैल्यू होती है, जो कलर व्हील पर पॉइंट को दिखाती है.
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)) )
मार्कर की ओपैसिटी को पसंद के मुताबिक बनाएं
किसी मार्कर की ओपैसिटी (अपारदर्शिता) को मार्कर से कंट्रोल करने के लिए, parameterOptions.alpha() का इस्तेमाल किया जा सकता है. ऐल्फ़ा को 0.0 और 1.0 के बीच फ़्लोट के तौर पर बताया जाना चाहिए, जहां 0 पूरी तरह पारदर्शी होता है और 1 पूरी तरह से ओपेक होता है.
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) )
मार्कर इमेज को पसंद के मुताबिक बनाएं
आप डिफ़ॉल्ट मार्कर इमेज को कस्टम मार्कर इमेज से बदल सकते हैं. इसे अक्सर
आइकॉन कहा जाता है. कस्टम आइकॉन को हमेशा BitmapDescriptor
के तौर पर सेट किया जाता है. साथ ही, इन्हें BitmapDescriptorFactory
क्लास में
किसी एक तरीके का इस्तेमाल करके तय किया जाता है.
fromAsset(String assetName)
- एसेट डायरेक्ट्री में मौजूद बिटमैप इमेज के नाम का इस्तेमाल करके, कस्टम मार्कर बनाता है.
fromBitmap(Bitmap image)
- बिटमैप इमेज से कस्टम मार्कर बनाता है.
fromFile(String fileName)
- डिवाइस के स्टोरेज में मौजूद बिटमैप इमेज फ़ाइल के नाम का इस्तेमाल करके, पसंद के मुताबिक आइकॉन बनाता है.
fromPath(String absolutePath)
- बिटमैप इमेज के ऐब्सलूट फ़ाइल पाथ से कस्टम मार्कर बनाता है.
fromResource(int resourceId)
- बिटमैप इमेज के रिसॉर्स आईडी का इस्तेमाल करके, कस्टम मार्कर बनाता है.
नीचे दिया गया स्निपेट, कस्टम आइकॉन के साथ एक मार्कर बनाता है.
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)) )
मार्कर को फ़्लैट करना
मार्कर आइकॉन आम तौर पर स्क्रीन के हिसाब से बनाए जाते हैं. मैप को घुमाने, झुकाने या ज़ूम करने से मार्कर के ओरिएंटेशन में कोई बदलाव नहीं होगा. आप मार्कर के ओरिएंटेशन को इस तरह सेट कर सकते हैं कि वह पृथ्वी पर सपाट रहे. इस तरह से ओरिएंटेशन किए गए मार्कर, जब मैप को घुमाए जाएंगे, तब वे घुमाएंगे और मैप को झुकाने पर ऐंगल बदलेंगे. मैप को ज़ूम इन या ज़ूम आउट करने पर, फ़्लैट मार्कर अपना आकार बनाए रखेंगे.
मार्कर का ओरिएंटेशन बदलने के लिए, मार्कर की flat
प्रॉपर्टी को
true
पर सेट करें.
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) )
मार्कर को घुमाना
Marker
की मदद से, मार्कर को उसके ऐंकर पॉइंट के आस-पास घुमाएं.setRotation()
तरीका. घुमाव को डिफ़ॉल्ट स्थिति से
घड़ी की दिशा में डिग्री में मापा जाता है. जब मार्कर मैप पर सपाट होता है, तो
डिफ़ॉल्ट स्थिति उत्तर होती है. जब मार्कर सपाट नहीं होता, तो डिफ़ॉल्ट स्थिति ऊपर की ओर होती है और घुमाव इस तरह होता है कि मार्कर हमेशा कैमरे की ओर होता है.
नीचे दिया गया उदाहरण मार्कर को 90° घुमाता है. ऐंकर पॉइंट को
0.5,0.5
पर सेट करने से, मार्कर, बेस के बजाय इसके केंद्र के चारों ओर घूमता है.
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) )
मार्कर z-इंडेक्स
z-इंडेक्स मैप पर दूसरे मार्कर के मुकाबले, इस मार्कर के स्टैक क्रम को बताता है. ज़्यादा z-इंडेक्स वाला एक मार्कर, कम z-इंडेक्स वाले मार्कर के ऊपर बनाया जाता है. डिफ़ॉल्ट z-इंडेक्स वैल्यू 0
है.
MarkerOptions.zIndex()
को कॉल करके, मार्कर के विकल्प ऑब्जेक्ट पर z-index सेट करें, जैसा कि इस कोड स्निपेट में दिखाया गया है:
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()
को कॉल करके मार्कर के z-इंडेक्स को ऐक्सेस कर सकते हैं और
Marker.setZIndex()
पर कॉल करके इसे बदल सकते हैं.
मार्कर हमेशा टाइल की परतों और दूसरे गैर-मार्कर ओवरले (ग्राउंड ओवरले, पॉलीलाइन, पॉलीलाइन, और दूसरी आकार) के ऊपर बनाए जाते हैं, चाहे दूसरे ओवरले का z-इंडेक्स कुछ भी हो. मार्कर को दूसरे ओवरले की तुलना में एक अलग z-इंडेक्स समूह में माना जाता है.
क्लिक इवेंट पर z-इंडेक्स के असर के बारे में नीचे पढ़ें.
मार्कर इवेंट मैनेज करना
Maps API से, आपको मार्कर इवेंट सुनने और उनका जवाब देने की सुविधा मिलती है. इन इवेंट को सुनने के लिए, आपको मार्कर से जुड़े GoogleMap
ऑब्जेक्ट पर, उससे जुड़ा लिसनर सेट करना होगा. जब मैप पर किसी एक मार्कर पर इवेंट होता है, तब लिसनर कॉलबैक को, पैरामीटर के तौर पर पास किए गए इससे जुड़े Marker
ऑब्जेक्ट के साथ शुरू किया जाता है. अपने
Marker
ऑब्जेक्ट की तुलना किसी Marker
ऑब्जेक्ट से करने के लिए, आपको
equals()
का इस्तेमाल करना चाहिए, न कि ==
का.
ये इवेंट सुने जा सकते हैं:
मार्कर क्लिक इवेंट
मार्कर पर क्लिक इवेंट को सुनने के लिए, OnMarkerClickListener
का इस्तेमाल किया जा सकता है. इस लिसनर को मैप पर सेट करने के लिए, GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)
को कॉल करें. जब कोई उपयोगकर्ता किसी मार्कर पर क्लिक करेगा, तो onMarkerClick(Marker)
को कॉल किया जाएगा और मार्कर को एक तर्क के तौर पर पास किया जाएगा. यह तरीका एक बूलियन रिटर्न करता है, जिससे पता चलता है कि आपने इवेंट का इस्तेमाल कर लिया है या नहीं. इसका मतलब है कि आपको डिफ़ॉल्ट व्यवहार को रोकना है. अगर यह जवाब में false
दिखाता है, तो कस्टम कार्रवाई के साथ-साथ
डिफ़ॉल्ट कार्रवाई भी होगी. किसी मार्कर क्लिक इवेंट का डिफ़ॉल्ट व्यवहार उसकी जानकारी विंडो (अगर उपलब्ध हो) दिखाना और कैमरे को इस तरह मूव करना है कि मार्कर मैप के बीच में हो.
क्लिक इवेंट पर z-इंडेक्स का असर:
- जब कोई उपयोगकर्ता मार्कर के क्लस्टर पर क्लिक करता है, तो सबसे ज़्यादा z-इंडेक्स वाले मार्कर के लिए क्लिक इवेंट ट्रिगर होता है.
- हर क्लिक पर ज़्यादा से ज़्यादा एक इवेंट ट्रिगर होता है. दूसरे शब्दों में, क्लिक को कम z-इंडेक्स मान वाले मार्कर या दूसरे ओवरले पर पास नहीं किया जाता.
- मार्कर के क्लस्टर पर क्लिक करने से, बाद के क्लिक पूरे क्लस्टर में होते जाते हैं और हर एक को बारी-बारी से चुना जाता है. चक्र का क्रम पहले z-इंडेक्स को प्राथमिकता देता है, फिर क्लिक पॉइंट से उसके आस-पास की दूरी को.
- अगर उपयोगकर्ता, क्लस्टर के बाहरी हिस्से पर क्लिक करता है, तो एपीआई, क्लस्टर की फिर से गिनती करता है और क्लिक साइकल की स्थिति को रीसेट करता है, ताकि यह शुरुआत से शुरू हो.
- साइकल फिर से शुरू करने से पहले क्लिक इवेंट, मार्कर क्लस्टर से होते हुए दूसरे आकारों और ओवरले में होता है.
- दूसरे ओवरले के z-इंडेक्स पर ध्यान दिए बिना, दूसरे ओवरले या आकार (पॉलीलाइन, पॉलीगॉन, सर्कल और/या ग्राउंड ओवरले) की तुलना में मार्कर को एक अलग z-इंडेक्स समूह में रखा जाता है. अगर कई मार्कर, ओवरले या आकार एक-दूसरे के ऊपर लगाए जाते हैं, तो क्लिक इवेंट पहले मार्कर के क्लस्टर से होकर गुज़रता है. इसके बाद, क्लिक किए जा सकने वाले दूसरे ओवरले या आकार के लिए उन्हें z-इंडेक्स वैल्यू के आधार पर ट्रिगर किया जाता है.
मार्कर ड्रैग इवेंट
मार्कर पर ड्रैग इवेंट सुनने के लिए OnMarkerDragListener
का इस्तेमाल किया जा सकता है. इस लिसनर को मैप पर सेट करने के लिए, GoogleMap.setOnMarkerDragListener
को कॉल करें. किसी मार्कर को खींचने के लिए, उपयोगकर्ता को
उस मार्कर को दबाकर रखना होगा. जब उपयोगकर्ता अपनी उंगली को स्क्रीन से हटाता है, तो मार्कर उसी जगह पर बना रहेगा. जब किसी मार्कर को खींचा जाता है, तो शुरुआत में onMarkerDragStart(Marker)
को कॉल किया जाता है. मार्कर को खींचे जाने के दौरान, onMarkerDrag(Marker)
को लगातार कॉल किया जाता है. 'खींचें और छोड़ें' के आखिर में,
onMarkerDragEnd(Marker)
को कॉल किया जाता है. Marker.getPosition()
पर कॉल करके आप किसी भी समय मार्कर की स्थिति पा सकते हैं.