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

เลือกแพลตฟอร์ม แอนดรอยด์ iOS JavaScript

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

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

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

Kotlin

Java

บทนำ

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

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

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

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

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

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

ตัวอย่างต่อไปนี้แสดงวิธีการเพิ่มเครื่องหมายลงในแผนที่ เครื่องหมายคือ สร้างขึ้นที่พิกัด -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));
}

      

แสดงข้อมูลเพิ่มเติมเกี่ยวกับเครื่องหมาย

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

เชื่อมโยงข้อมูลกับเครื่องหมาย

คุณสามารถจัดเก็บออบเจ็กต์ข้อมูลที่กำหนดเองโดยใช้เครื่องหมายโดยใช้ 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)));

      

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

คุณสามารถควบคุมความทึบแสงของเครื่องหมายได้โดยใช้เมธอด MarkerOptions.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));

      

หมุนเครื่องหมาย

คุณสามารถหมุนเครื่องหมายรอบๆ จุดยึดด้วย MarkersetRotation() วิธี การหมุนจะวัดเป็นองศาตามเข็มนาฬิกา จากตำแหน่งเริ่มต้น เมื่อเครื่องหมายอยู่ในตำแหน่งราบบนแผนที่ ค่าเริ่มต้น คือทิศเหนือ เมื่อเครื่องหมายไม่แบน ตำแหน่งเริ่มต้นจะชี้ และหมุนให้อยู่ในแนวที่เครื่องหมายหันเข้าหากล้องเสมอ

ตัวอย่างด้านล่างหมุนเครื่องหมาย 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 ต่อกิจกรรมการคลิกด้านล่าง

จัดการเหตุการณ์ของตัวทำเครื่องหมาย

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

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

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

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

ผลกระทบของดัชนีลำดับ Z ต่อกิจกรรมการคลิก:

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

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

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