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

เลือกแพลตฟอร์ม: Android iOS JavaScript

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

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

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

โคตลิน

Java

เกริ่นนำ

เครื่องหมายระบุตำแหน่งบนแผนที่ เครื่องหมายเริ่มต้นใช้ไอคอนมาตรฐาน ซึ่งพบได้โดยทั่วไปในรูปลักษณ์ของ Google แผนที่ คุณสามารถเปลี่ยนสี รูปภาพ หรือจุดยึดของไอคอนผ่านทาง API ได้ เครื่องหมายเป็นวัตถุประเภท Marker และเพิ่มลงในแผนที่โดยใช้เมธอด GoogleMap.addMarker(markerOptions)

เครื่องหมายออกแบบมาให้โต้ตอบได้ โดยจะได้รับเหตุการณ์ click โดยค่าเริ่มต้น และมักจะใช้กับ Listener เหตุการณ์เพื่อแสดงหน้าต่างข้อมูล การตั้งค่าคุณสมบัติ draggable ของเครื่องหมายเป็น true ช่วยให้ผู้ใช้เปลี่ยนตำแหน่งของเครื่องหมายได้ ใช้การกดค้างเพื่อเปิดใช้งาน ความสามารถในการย้ายเครื่องหมาย

โดยค่าเริ่มต้น เมื่อผู้ใช้แตะเครื่องหมาย แถบเครื่องมือแผนที่จะปรากฏที่ด้านขวาล่างของแผนที่ ซึ่งช่วยให้ผู้ใช้เข้าถึงแอป Google Maps บนอุปกรณ์เคลื่อนที่ได้อย่างรวดเร็ว คุณสามารถปิดใช้แถบเครื่องมือได้ ดูข้อมูลเพิ่มเติมได้ในคำแนะนำเกี่ยวกับการควบคุม

เริ่มต้นใช้งานเครื่องหมาย

Maps Live ตอนนี้ครอบคลุมพื้นฐานการเพิ่มเครื่องหมายลงในแผนที่โดยใช้ Maps SDK สำหรับ Android

เพิ่มเครื่องหมาย

ตัวอย่างต่อไปนี้แสดงวิธีเพิ่มเครื่องหมายลงในแผนที่ เครื่องหมายจะสร้างขึ้นที่พิกัด -33.852,151.211 (ซิดนีย์ ออสเตรเลีย) และแสดงสตริง "มาร์กเกอร์ในซิดนีย์" ในหน้าต่างข้อมูลเมื่อคลิก

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
สมอ
จุดบนรูปภาพที่วางไว้ในตำแหน่งละติจูดและลองจิจูดของเครื่องหมาย ค่าเริ่มต้นจะอยู่ที่ตรงกลางด้านล่างของรูปภาพ
อัลฟ่า
ตั้งค่าความทึบแสงของเครื่องหมาย ค่าเริ่มต้นคือ 1.0
ชื่อ
สตริงที่แสดงในหน้าต่างข้อมูลเมื่อผู้ใช้แตะเครื่องหมาย
ตัวอย่างข้อมูล
ข้อความเพิ่มเติมจะแสดงอยู่ใต้ชื่อ
Icon
บิตแมปที่แสดงแทนที่รูปภาพตัวทำเครื่องหมายเริ่มต้น
ลากได้
ตั้งค่าเป็น 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)));

      

ปรับแต่งความทึบแสงของเครื่องหมาย

คุณสามารถควบคุมความทึบแสงของเครื่องหมายได้ด้วยเมธอด ManageOptions.alpha() อัลฟ่าควรระบุเป็นแบบลอยที่อยู่ระหว่าง 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)
สร้างตัวทำเครื่องหมายที่กำหนดเองโดยใช้ชื่อของรูปภาพบิตแมปในไดเรกทอรีเนื้อหา
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 ที่มีตัวทำเครื่องหมายอยู่ เมื่อเหตุการณ์เกิดขึ้นบนตัวทำเครื่องหมายตัวใดตัวหนึ่งบนแผนที่ ระบบจะเรียกใช้การเรียกกลับของผู้ฟังโดยมีออบเจ็กต์ Marker ที่เกี่ยวข้องส่งผ่านเป็นพารามิเตอร์ หากต้องการเปรียบเทียบออบเจ็กต์ Marker นี้กับการอ้างอิงของคุณเองกับออบเจ็กต์ Marker คุณต้องใช้ equals() ไม่ใช่ ==

คุณฟังเหตุการณ์ต่อไปนี้ได้

กิจกรรมการคลิกเครื่องหมาย

คุณสามารถใช้ OnMarkerClickListener เพื่อฟังเหตุการณ์การคลิกบนเครื่องหมายได้ หากต้องการตั้งค่า Listener นี้บนแผนที่ ให้โทร GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) เมื่อผู้ใช้คลิกที่เครื่องหมาย ระบบจะเรียกใช้ onMarkerClick(Marker) และส่งต่อเครื่องหมายเป็นอาร์กิวเมนต์ เมธอดนี้จะแสดงบูลีนที่ระบุว่าคุณได้ใช้เหตุการณ์แล้วหรือไม่ (กล่าวคือ คุณต้องการหยุดพฤติกรรมเริ่มต้น) หากแสดงผลเป็น false ลักษณะการทำงานเริ่มต้นจะเกิดขึ้นนอกเหนือจากลักษณะการทำงานที่คุณกำหนดเอง ลักษณะการทำงานเริ่มต้นของเหตุการณ์การคลิกเครื่องหมายคือการแสดงหน้าต่างข้อมูล (หากมี) และเลื่อนกล้องเพื่อให้เครื่องหมายอยู่ตรงกลางแผนที่

ผลกระทบของดัชนี z ต่อเหตุการณ์การคลิก

  • เมื่อผู้ใช้คลิกที่กลุ่มเครื่องหมาย ระบบจะทริกเกอร์เหตุการณ์การคลิกสำหรับเครื่องหมายที่มีดัชนี z สูงสุด
  • มีการเรียกให้แสดงเหตุการณ์ไม่เกิน 1 รายการต่อคลิก กล่าวคือ ระบบจะไม่ส่งคลิกไปที่เครื่องหมายหรือการวางซ้อนอื่นๆ ที่มีค่าดัชนีลำดับ Z ต่ำกว่า
  • การคลิกที่คลัสเตอร์เครื่องหมายจะทำให้เกิดการคลิกในลำดับต่อๆ ไปในคลัสเตอร์ ระบบจะเลือกแต่ละรายการไปเรื่อยๆ ลำดับของวงจรจะให้ความสำคัญกับดัชนี z ก่อนเป็นอันดับแรก ตามด้วยระยะห่างจากจุดคลิก
  • หากผู้ใช้คลิกนอกระยะใกล้ของคลัสเตอร์ API จะคำนวณคลัสเตอร์อีกครั้งและรีเซ็ตสถานะของรอบการคลิกเพื่อให้เริ่มต้นจากจุดเริ่มต้น
  • เหตุการณ์การคลิกจะเลื่อนผ่านคลัสเตอร์ตัวทำเครื่องหมายไปยังรูปร่างและโฆษณาซ้อนทับอื่นๆ ก่อนที่จะเริ่มต้นรอบใหม่
  • เครื่องหมายถือว่าอยู่ในกลุ่มดัชนีลำดับ z แยกต่างหากเมื่อเทียบกับการวางซ้อนหรือรูปร่างอื่นๆ (เส้นประกอบ รูปหลายเหลี่ยม วงกลม และ/หรือการวางซ้อนพื้น) ไม่ว่าดัชนีลำดับ z ของการวางซ้อนอื่นๆ จะเป็นอย่างไรก็ตาม หากมีเครื่องหมาย การวางซ้อน หรือรูปร่างหลายรายการวางซ้อนกัน กิจกรรมการคลิกจะหมุนเวียนผ่านกลุ่มเครื่องหมายก่อน จากนั้นจะทริกเกอร์สำหรับการวางซ้อนหรือรูปร่างอื่นๆ ที่คลิกได้ โดยอิงตามค่าดัชนีลำดับ Z

เหตุการณ์การลากเครื่องหมาย

คุณใช้ OnMarkerDragListener เพื่อฟังการลากเหตุการณ์บนเครื่องหมายได้ หากต้องการตั้งค่า Listener นี้บนแผนที่ ให้โทร GoogleMap.setOnMarkerDragListener หากต้องการลากเครื่องหมาย ผู้ใช้ต้องกดที่เครื่องหมายค้างไว้ เมื่อผู้ใช้เอานิ้วออกจากหน้าจอ เครื่องหมายจะยังคงอยู่ในตำแหน่งนั้น เมื่อมีการลากเครื่องหมาย ระบบจะเรียกใช้ onMarkerDragStart(Marker) ในขั้นต้น ขณะที่เครื่องหมายมีการลาก onMarkerDrag(Marker) จะถูกเรียกใช้อย่างต่อเนื่อง หลังการลาก onMarkerDragEnd(Marker) จะมีการเรียกใช้ คุณดูตำแหน่งของเครื่องหมายได้ทุกเมื่อโดยเรียกใช้ Marker.getPosition()