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

เลือกแพลตฟอร์ม: 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 (ซิดนีย์ ออสเตรเลีย) และแสดงสตริง "มาร์กเกอร์ในซิดนีย์" ในหน้าต่างข้อมูลเมื่อคลิก

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
สมอ
จุดบนภาพที่จะวางที่เครื่องหมายละติจูดลองจิจูด ค่าเริ่มต้นนี้จะอยู่ตรงกลางของด้านล่างของรูปภาพ
Alpha
ตั้งค่าความทึบของเครื่องหมาย ค่าเริ่มต้นคือ 1.0
ชื่อ
สตริงที่ปรากฏในหน้าต่างข้อมูลเมื่อผู้ใช้แตะ เครื่องหมาย
ตัวอย่างข้อมูล
ข้อความเพิ่มเติมที่แสดงอยู่ด้านล่างชื่อ
Icon
บิตแมปที่แสดงแทนรูปภาพเครื่องหมายเริ่มต้น
ลากได้
ตั้งค่าเป็น true หากต้องการอนุญาตให้ผู้ใช้ย้ายเครื่องหมาย ค่าเริ่มต้นคือ false
แสดง
ตั้งค่าเป็น false เพื่อซ่อนเครื่องหมาย ค่าเริ่มต้นคือ true
การจัดวางแนวราบหรือบิลบอร์ด
โดยค่าเริ่มต้น เครื่องหมายจะใช้การวางแนวของป้ายบิลบอร์ด ซึ่งหมายความว่าจะวาดตามแนวของหน้าจออุปกรณ์ ไม่ใช่พื้นผิวของแผนที่ การหมุน การเอียง หรือการซูมแผนที่ไม่เปลี่ยนการวางแนวของเครื่องหมาย คุณสามารถตั้งค่าทิศทางของเครื่องหมายให้แบนกับพื้นโลก เครื่องหมายแสดงค่าแบบแบนราบจะหมุนเมื่อมีการหมุนแผนที่ และเปลี่ยนมุมมองเมื่อแผนที่เอียง เช่นเดียวกับเครื่องหมายบิลบอร์ด เครื่องหมายแสดงการแบนจะมีขนาดเท่าเดิมเมื่อซูมแผนที่เข้าหรือออก
การหมุน
การวางแนวของหมุด จะระบุเป็นองศาตามเข็มนาฬิกา ตําแหน่งเริ่มต้นจะเปลี่ยนหากเครื่องหมายแบน ตําแหน่งเริ่มต้นของเครื่องหมายคงที่จะอยู่ในระดับทิศเหนือ เมื่อเครื่องหมายไม่แบน ตําแหน่งเริ่มต้นจะชี้ขึ้น และการหมุนเป็นทิศทางที่หันกล้องเข้าหาตัว

ข้อมูลโค้ดด้านล่างจะสร้างเครื่องหมายแบบง่ายที่มีไอคอนเริ่มต้น

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))
)

      

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

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

      

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

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

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

ดัชนีลําดับ 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 แล้วความใกล้เคียงกับการคลิก
  • หากผู้ใช้คลิกที่นอกความใกล้เคียงของคลัสเตอร์ API จะคํานวณคลัสเตอร์ใหม่ และรีเซ็ตสถานะของรอบคลิกเพื่อให้เริ่มต้นจากจุดเริ่มต้น
  • กิจกรรมการคลิกจะลากผ่านกลุ่มเครื่องหมายไปยังรูปร่างและการวางซ้อนอื่นๆ ก่อนที่จะรีสตาร์ทรอบ
  • เครื่องหมายจะถือว่าอยู่ในกลุ่มดัชนีลําดับ Z แยกต่างหากอย่างมีประสิทธิภาพเมื่อเทียบกับภาพซ้อนทับหรือรูปทรงอื่นๆ (รูปหลายเหลี่ยม รูปหลายเหลี่ยม วงกลม และ/หรือภาพซ้อนทับระดับพื้น) โดยไม่คํานึงถึงดัชนีลําดับ Z ของภาพซ้อนทับอื่นๆ หากตัวทําเครื่องหมาย ตัววางซ้อน หรือรูปทรงหลายตัววางซ้อนบนกัน เหตุการณ์การคลิกจะวนรอบกลุ่มตัวทําเครื่องหมายก่อน จากนั้นจึงทริกเกอร์สําหรับการวางซ้อนหรือรูปร่างที่คลิกได้อื่นๆ ตามค่าดัชนีลําดับ z

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

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