
เครื่องหมายระบุตำแหน่งบนแผนที่ เครื่องหมายเริ่มต้นใช้ไอคอนมาตรฐานที่พบได้ทั่วไปใน Google Maps คุณสามารถเปลี่ยนสี รูปภาพ หรือจุดยึดของไอคอนผ่าน API ได้ เครื่องหมายเป็นออบเจ็กต์ประเภท
Marker และจะเพิ่มลงในแผนที่ด้วยเมธอด
GoogleMap.addMarker(markerOptions)
เครื่องหมายออกแบบมาให้โต้ตอบได้ โดยจะรับเหตุการณ์ click โดย
ค่าเริ่มต้น และมักใช้ร่วมกับ Listener ของเหตุการณ์เพื่อแสดง หน้าต่างข้อมูล การตั้งค่าพร็อพเพอร์ตี้ draggable ของเครื่องหมายเป็น true จะช่วยให้ผู้ใช้เปลี่ยนตำแหน่งของเครื่องหมายได้ ใช้การกดค้างเพื่อเปิดใช้งานความสามารถในการย้ายเครื่องหมาย
โดยค่าเริ่มต้น เมื่อผู้ใช้แตะเครื่องหมาย แถบเครื่องมือแผนที่จะปรากฏขึ้นที่ด้านขวาล่างของแผนที่ ซึ่งจะช่วยให้ผู้ใช้เข้าถึงแอป Google Maps บนมือถือได้อย่างรวดเร็ว คุณสามารถปิดใช้แถบเครื่องมือได้ ดูข้อมูลเพิ่มเติมได้ที่ คู่มือการควบคุม
เพิ่มเครื่องหมาย
ตัวอย่างต่อไปนี้แสดงวิธีเพิ่มเครื่องหมายลงในแผนที่ เครื่องหมายจะสร้างขึ้นที่พิกัด -33.852,151.211 (ซิดนีย์ ออสเตรเลีย) และแสดงสตริง "Marker in 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)) }
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)); }
แสดงข้อมูลเพิ่มเติมเกี่ยวกับเครื่องหมาย
ข้อกำหนดทั่วไปคือการแสดงข้อมูลเพิ่มเติมเกี่ยวกับสถานที่เมื่อผู้ใช้แตะเครื่องหมายบนแผนที่ ดูคู่มือหน้าต่างข้อมูล
เชื่อมโยงข้อมูลกับเครื่องหมาย
คุณสามารถจัดเก็บออบเจ็กต์ข้อมูลที่กำหนดเองไว้กับเครื่องหมายได้โดยใช้ Marker.setTag() และดึงข้อมูลออบเจ็กต์โดยใช้ Marker.getTag() ตัวอย่างด้านล่างแสดงวิธีนับจำนวนครั้งที่มีการคลิกตัวทำเครื่องหมายโดยใช้แท็ก
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 } }
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; } }
ตัวอย่างสถานการณ์ที่การจัดเก็บและดึงข้อมูลด้วยเครื่องหมายมีประโยชน์
- แอปของคุณอาจรองรับเครื่องหมายประเภทต่างๆ และคุณต้องการจัดการเครื่องหมายเหล่านั้นแตกต่างกันเมื่อผู้ใช้คลิก หากต้องการทำเช่นนี้ คุณสามารถจัดเก็บ
Stringไว้กับเครื่องหมายเพื่อระบุประเภท - คุณอาจเชื่อมต่อกับระบบที่มีตัวระบุบันทึกที่ไม่ซ้ำกัน ซึ่งเครื่องหมายจะแสดงบันทึกที่เฉพาะเจาะจงในระบบนั้น
- ข้อมูลเครื่องหมายอาจระบุลำดับความสำคัญที่จะใช้เมื่อตัดสินใจเกี่ยวกับดัชนีลำดับ Z ของเครื่องหมาย
ทำให้เครื่องหมายลากได้
คุณสามารถเปลี่ยนตำแหน่งเครื่องหมายได้เมื่อเพิ่มลงในแผนที่แล้ว ตราบใดที่พร็อพเพอร์ตี้ draggable ตั้งค่าเป็น true กดเครื่องหมายค้างไว้เพื่อเปิดใช้การลาก เมื่อคุณปล่อยนิ้วออกจากหน้าจอ เครื่องหมายจะยังคงอยู่ในตำแหน่งนั้น
เครื่องหมายจะลากไม่ได้โดยค่าเริ่มต้น คุณต้องตั้งค่าเครื่องหมายให้ลากได้โดยชัดแจ้งด้วย MarkerOptions.draggable(boolean) ก่อนที่จะเพิ่มลงในแผนที่ หรือ Marker.setDraggable(boolean) เมื่อเพิ่มลงในแผนที่แล้ว
คุณสามารถฟังเหตุการณ์การลากบนเครื่องหมายได้ตามที่อธิบายไว้ในเหตุการณ์การลากเครื่องหมาย
ข้อมูลโค้ดด้านล่างจะเพิ่มเครื่องหมายที่ลากได้ที่เพิร์ท ออสเตรเลีย
Kotlin
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .draggable(true) )
Java
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .draggable(true));
ปรับแต่งเครื่องหมาย
วิดีโอนี้แสดงวิธีใช้เครื่องหมายเพื่อแสดงภาพตำแหน่งบนแผนที่
เครื่องหมายอาจกำหนดรูปภาพที่กำหนดเองเพื่อแสดงแทนไอคอนเริ่มต้น การกำหนดไอคอนเกี่ยวข้องกับการตั้งค่าพร็อพเพอร์ตี้จำนวนหนึ่งซึ่งส่งผลต่อลักษณะการทำงานของเครื่องหมาย
เครื่องหมายรองรับการปรับแต่งผ่านพร็อพเพอร์ตี้ต่อไปนี้
- ตำแหน่ง (ต้องระบุ)
- ค่า
LatLngสำหรับตำแหน่งของเครื่องหมายบนแผนที่ ซึ่งเป็นพร็อพเพอร์ตี้เดียวที่ต้องระบุสำหรับออบเจ็กต์Marker - จุดยึด
- จุดบนรูปภาพที่จะวางไว้ที่ตำแหน่ง LatLng ของ เครื่องหมาย ค่าเริ่มต้นคือตรงกลางด้านล่างของรูปภาพ
- อัลฟ่า
- ตั้งค่าความทึบแสงของเครื่องหมาย ค่าเริ่มต้นคือ 1.0
- ชื่อ
- สตริงที่จะแสดงในหน้าต่างข้อมูลเมื่อผู้ใช้แตะเครื่องหมาย
- ตัวอย่างข้อมูล
- ข้อความเพิ่มเติมที่จะแสดงใต้ชื่อ
- ไอคอน
- บิตแมปที่จะแสดงแทนรูปภาพเครื่องหมายเริ่มต้น
- ลากได้
- ตั้งค่าเป็น
trueหากต้องการอนุญาตให้ผู้ใช้ย้าย ตัวทำเครื่องหมาย ค่าเริ่มต้นคือfalse - แสดง
- ตั้งค่าเป็น
falseเพื่อทำให้ตัวทำเครื่องหมายไม่ปรากฏ ค่าเริ่มต้นคือtrue. - การวางแนวแบบแบนหรือแบบบิลบอร์ด
- โดยค่าเริ่มต้น เครื่องหมายจะใช้การวางแนวแบบป้ายโฆษณา ซึ่งหมายความว่าจะวาด โดยวางแนวกับหน้าจอของอุปกรณ์แทนที่จะวางแนวกับพื้นผิวของแผนที่ การหมุน การเอียง หรือการซูมแผนที่จะไม่เปลี่ยนการวางแนวของ เครื่องหมาย คุณสามารถตั้งค่าการวางแนวของเครื่องหมายให้แบนราบกับโลกได้ เครื่องหมายแบบแบนจะหมุนเมื่อแผนที่หมุน และเปลี่ยนมุมมองเมื่อแผนที่เอียง เครื่องหมายแบบแบนจะคงขนาดไว้เมื่อซูมเข้าหรือซูมออกแผนที่ เช่นเดียวกับเครื่องหมายแบบป้ายโฆษณา
- การหมุน
- การวางแนวของเครื่องหมายที่ระบุเป็นองศาตามเข็มนาฬิกา ตำแหน่งเริ่มต้น จะเปลี่ยนไปหากเครื่องหมายแบน ตำแหน่งเริ่มต้นสำหรับเครื่องหมายแบบแบน คือการจัดแนวไปทางทิศเหนือ เมื่อตัวทำเครื่องหมายไม่แบน ตำแหน่งเริ่มต้น จะชี้ขึ้น และการหมุนจะทำให้ตัวทำเครื่องหมายหันหน้าเข้าหากล้องเสมอ
ข้อมูลโค้ดด้านล่างจะสร้างเครื่องหมายแบบง่ายด้วยไอคอนเริ่มต้น
Kotlin
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) )
Java
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation));
ปรับแต่งสีเครื่องหมาย
คุณสามารถปรับแต่งสีของรูปภาพเครื่องหมายเริ่มต้นได้โดยส่งออบเจ็กต์ BitmapDescriptor ไปยังเมธอด icon() คุณสามารถใช้ชุดสีที่
กำหนดไว้ล่วงหน้าในBitmapDescriptorFactory
ออบเจ็กต์ หรือตั้งค่าสีเครื่องหมายแบบกำหนดเองด้วย
BitmapDescriptorFactory.defaultMarker(float hue)เมธอด เฉดสีเป็นค่าระหว่าง 0 ถึง 360 ซึ่งแสดงจุดบนวงล้อสี
Kotlin
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) )
Java
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker( new MarkerOptions() .position(melbourneLocation) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
ปรับแต่งความทึบแสงของเครื่องหมาย
คุณสามารถควบคุมความทึบแสงของเครื่องหมายได้ด้วยเมธอด MarkerOptions.alpha() โดยควรระบุอัลฟ่าเป็นค่า Float ระหว่าง 0.0 ถึง 1.0 ซึ่ง 0 หมายถึงโปร่งใสทั้งหมด และ 1 หมายถึงทึบแสงทั้งหมด
Kotlin
val melbourneLocation = LatLng(-37.813, 144.962) val melbourne = map.addMarker( MarkerOptions() .position(melbourneLocation) .alpha(0.7f) )
Java
final LatLng melbourneLocation = new LatLng(-37.813, 144.962); Marker melbourne = map.addMarker(new MarkerOptions() .position(melbourneLocation) .alpha(0.7f));
ปรับแต่งรูปภาพเครื่องหมาย
คุณสามารถแทนที่รูปภาพเครื่องหมายเริ่มต้นด้วยรูปภาพเครื่องหมายแบบกำหนดเอง ซึ่งมักเรียกว่าไอคอน ไอคอนที่กำหนดเองจะตั้งค่าเป็น BitmapDescriptor เสมอ และ
กำหนดโดยใช้เมธอดใดเมธอดหนึ่งใน
BitmapDescriptorFactory คลาส
fromAsset(String assetName)- สร้างเครื่องหมายแบบกำหนดเองโดยใช้ชื่อรูปภาพบิตแมปในไดเรกทอรี Asset
fromBitmap(Bitmap image)- สร้างเครื่องหมายแบบกำหนดเองจากรูปภาพบิตแมป
fromFile(String fileName)- สร้างไอคอนที่กำหนดเองโดยใช้ชื่อไฟล์รูปภาพบิตแมปที่อยู่ในที่จัดเก็บข้อมูลภายใน
fromPath(String absolutePath)- สร้างเครื่องหมายแบบกำหนดเองจากเส้นทางไฟล์แบบสัมบูรณ์ของรูปภาพบิตแมป
fromResource(int resourceId)- สร้างเครื่องหมายแบบกำหนดเองโดยใช้รหัสทรัพยากรของรูปภาพบิตแมป
ข้อมูลโค้ดด้านล่างจะสร้างเครื่องหมายที่มีไอคอนที่กำหนดเอง
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)) )
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)));
ทำให้ตัวทำเครื่องหมายแบน
โดยปกติแล้ว ไอคอนตัวทำเครื่องหมายจะวาดโดยอิงตามสกรีน การหมุน การเอียง หรือการซูมแผนที่จะไม่เปลี่ยนการวางแนวของตัวทำเครื่องหมาย คุณสามารถตั้งค่าการวางแนวของเครื่องหมายให้แบนราบกับโลกได้ เครื่องหมายที่วางแนวในลักษณะนี้จะหมุนเมื่อแผนที่หมุน และเปลี่ยนมุมมองเมื่อแผนที่เอียง เครื่องหมายแบบแบนจะคงขนาดไว้เมื่อซูมเข้าหรือซูมออกแผนที่
หากต้องการเปลี่ยนการวางแนวของเครื่องหมาย ให้ตั้งค่าพร็อพเพอร์ตี้ flat ของเครื่องหมายเป็น true
Kotlin
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .flat(true) )
Java
final LatLng perthLocation = new LatLng(-31.90, 115.86); Marker perth = map.addMarker( new MarkerOptions() .position(perthLocation) .flat(true));
หมุนเครื่องหมาย
คุณสามารถหมุนเครื่องหมายรอบจุดยึดได้ด้วย Marker.setRotation() การหมุนจะวัดเป็นองศาตามเข็มนาฬิกาจากตำแหน่งเริ่มต้น เมื่อเครื่องหมายแบนราบอยู่บนแผนที่ ตำแหน่งเริ่มต้นคือทิศเหนือ เมื่อตัวทำเครื่องหมายไม่แบน ตำแหน่งเริ่มต้นจะชี้ขึ้น และการหมุนจะทำให้ตัวทำเครื่องหมายหันหน้าเข้าหากล้องเสมอ
ตัวอย่างด้านล่างจะหมุนเครื่องหมาย 90° การตั้งค่าจุดยึดเป็น 0.5,0.5 จะทำให้เครื่องหมายหมุนรอบจุดกึ่งกลางแทนที่จะหมุนรอบฐาน
Kotlin
val perthLocation = LatLng(-31.90, 115.86) val perth = map.addMarker( MarkerOptions() .position(perthLocation) .anchor(0.5f, 0.5f) .rotation(90.0f) )
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));
ดัชนีลำดับ Z ของเครื่องหมาย
ดัชนีลำดับ Z จะระบุลำดับการซ้อนของเครื่องหมายนี้เมื่อเทียบกับเครื่องหมายอื่นๆ บนแผนที่ ตัวทำเครื่องหมายที่มีดัชนีลำดับ Z สูงจะวาดทับตัวทำเครื่องหมายที่มีดัชนีลำดับ Z ต่ำกว่า ค่าดัชนีลำดับ Z เริ่มต้นคือ 0
ตั้งค่าดัชนีลำดับ Z ในออบเจ็กต์ตัวเลือกของเครื่องหมายโดยเรียกใช้ MarkerOptions.zIndex() ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
Kotlin
map.addMarker( MarkerOptions() .position(LatLng(10.0, 10.0)) .title("Marker z1") .zIndex(1.0f) )
Java
map.addMarker(new MarkerOptions() .position(new LatLng(10, 10)) .title("Marker z1") .zIndex(1.0f));
คุณสามารถเข้าถึงดัชนีลำดับ Z ของเครื่องหมายได้โดยเรียกใช้ Marker.getZIndex() และเปลี่ยนได้โดยเรียกใช้ Marker.setZIndex()
เครื่องหมายจะวาดเหนือเลเยอร์ไทล์และโอเวอร์เลย์อื่นๆ ที่ไม่ใช่เครื่องหมาย (โอเวอร์เลย์พื้น โพลีไลน์ รูปหลายเหลี่ยม และรูปร่างอื่นๆ) เสมอ ไม่ว่าดัชนีลำดับ Z ของโอเวอร์เลย์อื่นๆ จะเป็นเท่าใดก็ตาม ระบบจะถือว่าเครื่องหมายอยู่ในกลุ่มดัชนีลำดับ Z แยกต่างหากเมื่อเทียบกับโอเวอร์เลย์อื่นๆ
อ่านเกี่ยวกับผลของดัชนีลำดับ Z ต่อเหตุการณ์การคลิกด้านล่าง
จัดการเหตุการณ์ที่เกิดขึ้นกับเครื่องหมาย
Maps API ช่วยให้คุณฟังและตอบสนองต่อเหตุการณ์ที่เกิดขึ้นกับเครื่องหมายได้ หากต้องการฟังเหตุการณ์เหล่านี้ คุณต้องตั้งค่า Listener ที่เกี่ยวข้องในออบเจ็กต์ GoogleMap ที่เครื่องหมายสังกัดอยู่ เมื่อเหตุการณ์เกิดขึ้นกับเครื่องหมายใดเครื่องหมายหนึ่งบนแผนที่ ระบบจะเรียกใช้การเรียกกลับของ Listener โดยส่งออบเจ็กต์ Marker ที่เกี่ยวข้องผ่านเป็นพารามิเตอร์ หากต้องการเปรียบเทียบออบเจ็กต์ Marker นี้กับการอ้างอิงออบเจ็กต์ Marker ของคุณเอง คุณต้องใช้ equals() ไม่ใช่ ==
คุณสามารถฟังเหตุการณ์ต่อไปนี้
เหตุการณ์การคลิกเครื่องหมาย
คุณสามารถใช้ OnMarkerClickListener เพื่อฟัง Listener สำหรับกิจกรรมการคลิกบนตัวทำเครื่องหมาย หากต้องการตั้งค่า Listener นี้บนแผนที่ ให้เรียกใช้ GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) เมื่อผู้ใช้คลิกเครื่องหมาย ระบบจะเรียกใช้ onMarkerClick(Marker) และส่งเครื่องหมายผ่านเป็นอาร์กิวเมนต์ เมธอดนี้จะแสดงค่าบูลีนที่ระบุว่าคุณได้ใช้เหตุการณ์แล้วหรือไม่ (เช่น คุณต้องการระงับลักษณะการทำงานเริ่มต้น) หากแสดงผล false ลักษณะการทำงานเริ่มต้นจะเกิดขึ้นนอกเหนือจากลักษณะการทำงานที่กำหนดเอง ลักษณะการทำงานเริ่มต้นสำหรับเหตุการณ์การคลิกเครื่องหมายคือการแสดงหน้าต่างข้อมูล (หากมี) และย้ายกล้องเพื่อให้เครื่องหมายอยู่ตรงกลางแผนที่
ผลของดัชนีลำดับ Z ต่อเหตุการณ์การคลิก
- เมื่อผู้ใช้คลิกคลัสเตอร์เครื่องหมาย ระบบจะทริกเกอร์กิจกรรมการคลิกสำหรับเครื่องหมายที่มีดัชนีลำดับ Z สูงที่สุด
- ระบบจะทริกเกอร์เหตุการณ์อย่างน้อย 1 รายการต่อการคลิก กล่าวคือ ระบบจะไม่ส่งการคลิกไปยังเครื่องหมายหรือโอเวอร์เลย์อื่นๆ ที่มีค่าดัชนีลำดับ Z ต่ำกว่า
- การคลิกคลัสเตอร์เครื่องหมายจะทำให้การคลิกครั้งต่อๆ ไปหมุนเวียนไปตามคลัสเตอร์ โดยเลือกแต่ละรายการตามลำดับ ลำดับการหมุนเวียนจะให้ความสำคัญกับดัชนีลำดับ Z ก่อน แล้วจึงพิจารณาความใกล้เคียงกับจุดคลิก
- หากผู้ใช้คลิกนอกบริเวณใกล้เคียงของคลัสเตอร์ API จะคำนวณคลัสเตอร์ใหม่และรีเซ็ตสถานะการหมุนเวียนของการคลิกเพื่อให้เริ่มจากจุดเริ่มต้น
- ระบบจะถือว่าเครื่องหมายอยู่ในกลุ่มดัชนีลำดับ Z แยกต่างหากเมื่อเทียบกับโอเวอร์เลย์หรือรูปร่างอื่นๆ (โพลีไลน์ รูปหลายเหลี่ยม วงกลม และ/หรือโอเวอร์เลย์พื้น) ไม่ว่าดัชนีลำดับ Z ของโอเวอร์เลย์อื่นๆ จะเป็นเท่าใดก็ตาม หากเครื่องหมาย โอเวอร์เลย์ หรือรูปร่างหลายรายการซ้อนทับกัน ระบบจะหมุนเวียนกิจกรรมการคลิกผ่านคลัสเตอร์เครื่องหมายก่อน
เหตุการณ์การลากเครื่องหมาย
คุณสามารถใช้ OnMarkerDragListener เพื่อฟัง Listener สำหรับเหตุการณ์การลากบนตัวทำเครื่องหมาย หากต้องการตั้งค่า Listener นี้บนแผนที่ ให้เรียกใช้ GoogleMap.setOnMarkerDragListener หากต้องการลากเครื่องหมาย ผู้ใช้ต้องกดเครื่องหมายค้างไว้ เมื่อผู้ใช้ปล่อยนิ้วออกจากหน้าจอ เครื่องหมายจะยังคงอยู่ในตำแหน่งนั้น เมื่อมีการลากเครื่องหมาย ระบบจะเรียกใช้ onMarkerDragStart(Marker) ในตอนแรก ขณะที่ลากเครื่องหมาย ระบบจะเรียกใช้ onMarkerDrag(Marker) อย่างต่อเนื่อง เมื่อสิ้นสุดการลาก ระบบจะเรียกใช้ onMarkerDragEnd(Marker) คุณสามารถรับตำแหน่งของเครื่องหมายได้ทุกเมื่อโดยเรียกใช้ Marker.getPosition()