เครื่องหมายจะระบุตําแหน่งบนแผนที่ คุณปรับแต่งเครื่องหมายได้โดยเปลี่ยนสีเริ่มต้น หรือแทนที่ไอคอนเครื่องหมายด้วยรูปภาพที่กําหนดเอง หน้าต่างข้อมูลช่วยให้บริบทเพิ่มเติมแก่ตัวทําเครื่องหมายได้
ตัวอย่างโค้ด
ที่เก็บ ApiDemos ใน GitHub มีตัวอย่างที่แสดงจุดเด่นต่างๆ ของตัวทําเครื่องหมาย ดังนี้
Java
- MapWithMarker: แผนที่ง่ายๆ ที่มีเครื่องหมาย ดูบทแนะนําเกี่ยวกับการเพิ่มแผนที่ด้วยเครื่องหมาย
- MarkerDemoActivity: ใช้เครื่องหมายบนแผนที่ รวมถึงตัวเลือกและผู้ฟัง
โคตลิน
- MapWithMarker: แผนที่ง่ายๆ ที่มีเครื่องหมาย ดูบทแนะนําเกี่ยวกับการเพิ่มแผนที่ด้วยเครื่องหมาย KK
- MarkerDemoActivity: ใช้เครื่องหมายบนแผนที่ รวมถึงตัวเลือกและผู้ฟัง
บทนำ
เครื่องหมายจะระบุสถานที่บนแผนที่ เครื่องหมายเริ่มต้นจะใช้ไอคอนมาตรฐาน ซึ่งโดยทั่วไปใช้กับรูปลักษณ์และความรู้สึกของ Google Maps คุณสามารถเปลี่ยนสี รูปภาพ หรือจุดยึดของไอคอนผ่าน API ได้ ตัวทําเครื่องหมายคือออบเจ็กต์ประเภท
Marker
และจะเพิ่มลงในแผนที่ด้วยเมธอด GoogleMap.addMarker(markerOptions)
เครื่องหมายได้รับการออกแบบมาให้เป็นแบบอินเทอร์แอกทีฟ โดยจะได้รับ click
เหตุการณ์โดยค่าเริ่มต้น และมักจะใช้กับ Listener เหตุการณ์เพื่อเปิดหน้าต่างข้อมูล การตั้งค่าพร็อพเพอร์ตี้ draggable
ของเครื่องหมายเป็น true
ทําให้ผู้ใช้เปลี่ยนตําแหน่งของเครื่องหมายได้ กดค้างเพื่อเปิดใช้งานความสามารถในการย้ายเครื่องหมาย
โดยค่าเริ่มต้น เมื่อผู้ใช้แตะเครื่องหมาย แถบเครื่องมือแผนที่จะปรากฏที่ด้านล่างขวาของแผนที่ ซึ่งช่วยให้ผู้ใช้เข้าถึงแอป Google Maps บนอุปกรณ์เคลื่อนที่ได้อย่างรวดเร็ว คุณสามารถปิดใช้งานแถบเครื่องมือได้ ดูข้อมูลเพิ่มเติมได้ที่คําแนะนําเกี่ยวกับการควบคุม
การเริ่มต้นใช้งานเครื่องหมาย
Maps Live ตอนนี้ครอบคลุมพื้นฐานการเพิ่มเครื่องหมายลงในแผนที่โดยใช้ Maps SDK สําหรับ Android
เพิ่มเครื่องหมาย
ตัวอย่างต่อไปนี้สาธิตวิธีเพิ่มเครื่องหมายบนแผนที่ เครื่องหมายจะสร้างขึ้นที่พิกัด -33.852,151.211
(ซิดนีย์ ออสเตรเลีย) และแสดงสตริง "Marker ในซิดนีย์" ในหน้าต่างข้อมูลเมื่อคลิก
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
- ชื่อ
- สตริงที่ปรากฏในหน้าต่างข้อมูลเมื่อผู้ใช้แตะเครื่องหมาย
- ตัวอย่างข้อมูล
- ข้อความเพิ่มเติมที่ปรากฏใต้ชื่อ
- Icon
- บิตแมปที่แสดงแทนรูปภาพเครื่องหมายเริ่มต้น
- ลากได้
- ตั้งค่าเป็น
true
หากต้องการอนุญาตให้ผู้ใช้ย้ายเครื่องหมาย ค่าเริ่มต้นคือfalse
- แสดง
- ตั้งค่าเป็น
false
เพื่อซ่อนเครื่องหมาย ค่าเริ่มต้นคือtrue
- การจัดวางแบบ Flat หรือ Billboard
- โดยค่าเริ่มต้น ตัวทําเครื่องหมายจะใช้การวางแนวแบบบิลบอร์ด ซึ่งหมายความว่าจะวาดโดยเทียบกับหน้าจอของอุปกรณ์ ไม่ใช่วาดบนพื้นผิวแผนที่ การหมุน เอียง หรือซูมแผนที่ไม่เปลี่ยนการวางแนวของเครื่องหมาย คุณสามารถตั้งค่าทิศทางของเครื่องหมายให้แบนกับโลก เครื่องหมายเดี่ยวจะหมุนเมื่อมีการหมุนแผนที่ และเปลี่ยนมุมมองเมื่อแผนที่เอียง เช่นเดียวกับเครื่องหมายบิลบอร์ด เครื่องหมายแสดงการแบนจะคงขนาดไว้เมื่อซูมเข้าหรือซูมออกในแผนที่
- พูลโรเทชั่น
- การวางแนวของตัวทําเครื่องหมายที่ระบุในองศาตามเข็มนาฬิกา ตําแหน่งเริ่มต้นจะเปลี่ยนแปลงหากเครื่องหมายคงที่ ตําแหน่งเริ่มต้นของเครื่องหมายคงที่จะอยู่บนทิศเหนือ เมื่อเครื่องหมายตัวไม่แบน ตําแหน่งเริ่มต้นจะชี้ขึ้นและหมุนตามทิศทางที่เครื่องหมายหันหน้าเข้าหากล้องเสมอ
ข้อมูลโค้ดด้านล่างจะสร้างเครื่องหมายอย่างง่ายโดยมีไอคอนเริ่มต้น
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
ไปยังเมธอด icon() คุณสามารถใช้ชุดสีที่กําหนดไว้ล่วงหน้าในออบเจ็กต์ 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)) )
ปรับแต่งความทึบแสงของตัวทําเครื่องหมาย
คุณสามารถควบคุมความทึบแสงของตัวทําเครื่องหมายได้โดยใช้เมธอด MarkOptions.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)
- สร้างเครื่องหมายที่กําหนดเองจากรูปภาพ Bitmap
fromFile(String fileName)
- สร้างไอคอนที่กําหนดเองโดยใช้ชื่อว่าไฟล์ภาพ Bitmap ซึ่งอยู่ในที่จัดเก็บข้อมูลภายใน
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-index
ดัชนีลําดับ z จะระบุลําดับสแต็กของเครื่องหมายนี้เมื่อเทียบกับเครื่องหมายอื่นๆ บนแผนที่ ตัวทําเครื่องหมายที่มีดัชนี z สูงจะวาดที่ด้านบนของตัวทําเครื่องหมายที่มีดัชนี z ต่ํากว่า ค่าเริ่มต้นของดัชนีลําดับ z คือ 0
ตั้งค่าดัชนีลําดับ z ในออบเจ็กต์ตัวเลือกของเครื่องหมายโดยการเรียกใช้ MarkerOptions.zIndex()
ตามที่แสดงในข้อมูลโค้ดต่อไปนี้
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) )
คุณเข้าถึงดัชนี Z ของตัวทําเครื่องหมายได้โดยโทรหา Marker.getZIndex()
และเปลี่ยนได้โดยเรียกใช้ Marker.setZIndex()
เครื่องหมายจะวาดบนชิ้นส่วนแผนที่และการวางซ้อนอื่นๆ ที่ไม่ใช่เครื่องหมาย (การวางซ้อนพื้น, รูปหลายเหลี่ยม, รูปหลายเหลี่ยม และรูปร่างอื่นๆ) เสมอ โดยไม่คํานึงถึงดัชนีลําดับ Z ของการวางซ้อนอื่นๆ ตัวทําเครื่องหมายถือว่ามีประสิทธิภาพในกลุ่มดัชนี z ที่แยกจากกัน เมื่อเทียบกับการวางซ้อนอื่นๆ
อ่านรายละเอียดเกี่ยวกับผลกระทบของดัชนีลําดับ z ที่มีต่อกิจกรรมการคลิกด้านล่าง
จัดการเหตุการณ์เครื่องหมาย
Maps API ช่วยให้คุณฟังและตอบกลับเหตุการณ์ของตัวทําเครื่องหมายได้ หากต้องการฟังเหตุการณ์เหล่านี้ คุณต้องตั้งค่า Listener ที่เกี่ยวข้องในออบเจ็กต์ GoogleMap
ที่มีเครื่องหมายอยู่ เมื่อเหตุการณ์เกิดขึ้นในหนึ่งในเครื่องหมายบนแผนที่ ระบบจะเรียกการเรียกผู้ฟังไปยังออบเจ็กต์ Marker
ที่เกี่ยวข้องซึ่งส่งผ่านเป็นพารามิเตอร์ หากต้องการเปรียบเทียบออบเจ็กต์ Marker
นี้กับการอ้างอิงของคุณเองกับออบเจ็กต์ Marker
คุณต้องใช้ equals()
ไม่ใช่ ==
คุณสามารถฟังเหตุการณ์ต่อไปนี้ได้
เหตุการณ์การคลิกเครื่องหมาย
คุณใช้ OnMarkerClickListener
เพื่อฟังเหตุการณ์การคลิกในเครื่องหมายได้ ในการตั้งค่า Listener นี้บนแผนที่ ให้เรียก GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)
เมื่อผู้ใช้คลิกเครื่องหมาย ระบบจะเรียก onMarkerClick(Marker)
และเครื่องหมายจะส่งผ่านเป็นอาร์กิวเมนต์ วิธีนี้จะส่งคืนบูลีนที่ระบุว่าคุณได้ใช้เหตุการณ์หรือไม่ (กล่าวคือ คุณต้องระงับการทํางานเริ่มต้น) หากแสดงผล false
การทํางานเริ่มต้นจะเกิดขึ้นนอกเหนือจากการทํางานที่กําหนดเองของคุณ ลักษณะการทํางานเริ่มต้นของกิจกรรมการคลิกเครื่องหมายคือการแสดงหน้าต่างข้อมูล (หากมี) และย้ายกล้องเพื่อให้เครื่องหมายอยู่ตรงกลางบนแผนที่
ผลกระทบของดัชนีลําดับ z ต่อกิจกรรมการคลิก:
- เมื่อผู้ใช้คลิกกลุ่มของเครื่องหมาย ระบบจะทริกเกอร์เหตุการณ์การคลิกสําหรับเครื่องหมายที่มีดัชนี z สูงสุด
- เหตุการณ์สูงสุด 1 รายการจะทริกเกอร์ตามการคลิก กล่าวคือ ระบบจะไม่คลิกการคลิกไปยังเครื่องหมายหรือการวางซ้อนอื่นๆ ที่มีค่าดัชนีลําดับ z ต่ํากว่า
- การคลิกกลุ่มของเครื่องหมายจะทําให้มีการคลิกครั้งต่อๆ ไปในคลัสเตอร์ โดยอาจเลือกทั้ง 2 อย่างแยกกัน ลําดับของวงจรแรกก่อนดัชนีลําดับ z แล้วตามด้วยจุดต่อเชื่อม
- หากผู้ใช้คลิกนอกสถานที่ใกล้เคียงของคลัสเตอร์ API จะคํานวณคลัสเตอร์ใหม่ และรีเซ็ตสถานะของวงจรการคลิกเพื่อให้เริ่มต้นจากจุดเริ่มต้น
- เหตุการณ์การคลิกจะส่งผ่านคลัสเตอร์เครื่องหมายไปยังรูปร่างและการวางซ้อนอื่นๆ ก่อนที่จะเริ่มต้นรอบใหม่
- ตัวทําเครื่องหมายถือว่ามีประสิทธิภาพในกลุ่มดัชนี Z ที่แยกจากกัน เมื่อเทียบกับการวางซ้อนหรือรูปร่างอื่นๆ (รูปหลายเหลี่ยม รูปหลายเหลี่ยม วงกลม และ/หรือการวางซ้อนพื้น) โดยไม่คํานึงถึงดัชนีลําดับ z ของการวางซ้อนอื่นๆ หากเครื่องหมาย การวางซ้อน หรือรูปร่างหลายอันวางซ้อนอยู่ด้านบน กิจกรรมการคลิกจะวนผ่านกลุ่มเครื่องหมายก่อน จากนั้นจึงทริกเกอร์สําหรับการวางซ้อนหรือรูปร่างอื่นๆ ที่คลิกได้ โดยอิงตามค่าดัชนีลําดับ z
เหตุการณ์การลากด้วยเครื่องหมาย
คุณใช้ OnMarkerDragListener
เพื่อฟังเหตุการณ์ลากบนเครื่องหมายได้ ในการตั้งค่า Listener นี้บนแผนที่ ให้เรียก GoogleMap.setOnMarkerDragListener
หากต้องการลากเครื่องหมาย ผู้ใช้ต้องกดเครื่องหมายค้างไว้ เมื่อผู้ใช้เอานิ้วออกจากหน้าจอ เครื่องหมายนั้นจะยังคงอยู่ในตําแหน่งนั้น เมื่อมีการลากเครื่องหมาย
onMarkerDragStart(Marker)
จะถูกเรียกในขั้นต้น เมื่อมีการลากเครื่องหมาย
onMarkerDrag(Marker)
จะถูกเรียกอย่างต่อเนื่อง เมื่อสิ้นสุดการลาก
onMarkerDragEnd(Marker)
คุณรับตําแหน่งเครื่องหมายได้ทุกเมื่อโดยโทรหา Marker.getPosition()