ตัวทำเครื่องหมาย

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
เลือกแพลตฟอร์ม: Android iOS JavaScript

เครื่องหมายจะระบุตําแหน่งบนแผนที่ คุณปรับแต่งเครื่องหมายได้โดยเปลี่ยนสีเริ่มต้น หรือแทนที่ไอคอนเครื่องหมายด้วยรูปภาพที่กําหนดเอง หน้าต่างข้อมูลช่วยให้บริบทเพิ่มเติมแก่ตัวทําเครื่องหมายได้

ตัวอย่างโค้ด

ที่เก็บ ApiDemos ใน GitHub มีตัวอย่างที่แสดงจุดเด่นต่างๆ ของตัวทําเครื่องหมาย ดังนี้

Java

โคตลิน

บทนำ

เครื่องหมายจะระบุสถานที่บนแผนที่ เครื่องหมายเริ่มต้นจะใช้ไอคอนมาตรฐาน ซึ่งโดยทั่วไปใช้กับรูปลักษณ์และความรู้สึกของ 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()