Đánh dấu

Chọn nền tảng: Android iOS JavaScript

Các điểm đánh dấu biểu thị một vị trí duy nhất trên bản đồ. Bạn có thể tuỳ chỉnh điểm đánh dấu bằng cách thay đổi màu mặc định hoặc thay thế biểu tượng điểm đánh dấu bằng hình ảnh tuỳ chỉnh. Cửa sổ thông tin có thể cung cấp thêm ngữ cảnh cho điểm đánh dấu.

Mã mẫu

Kho lưu trữ ApiDemos trên GitHub bao gồm một mẫu minh hoạ nhiều tính năng cho điểm đánh dấu:

Java

Kotlin

Giới thiệu

Điểm đánh dấu xác định các vị trí trên bản đồ. Điểm đánh dấu mặc định sử dụng biểu tượng chuẩn, phổ biến với giao diện Google Maps. Bạn có thể thay đổi màu, hình ảnh hoặc điểm neo của biểu tượng qua API. Điểm đánh dấu là đối tượng thuộc loại Marker và được thêm vào bản đồ bằng phương thức GoogleMap.addMarker(markerOptions).

Điểm đánh dấu được thiết kế để có tính tương tác. Theo mặc định, các sự kiện này nhận được click sự kiện và thường được dùng với các trình nghe sự kiện để cung cấp cửa sổ thông tin. Việc đặt thuộc tính draggable của điểm đánh dấu thành true cho phép người dùng thay đổi vị trí của điểm đánh dấu. Nhấn và giữ để kích hoạt khả năng di chuyển điểm đánh dấu.

Theo mặc định, khi người dùng nhấn vào một điểm đánh dấu, thanh công cụ bản đồ sẽ xuất hiện ở dưới cùng bên phải bản đồ, cho phép người dùng truy cập nhanh vào ứng dụng dành cho thiết bị di động của Google Maps. Bạn có thể tắt thanh công cụ. Để biết thêm thông tin, vui lòng xem hướng dẫn kiểm soát.

Bắt đầu sử dụng điểm đánh dấu

Tập này của Maps Live bao gồm các thông tin cơ bản về cách thêm điểm đánh dấu vào bản đồ của bạn bằng cách sử dụng SDK Maps dành cho Android.

Thêm một điểm đánh dấu

Ví dụ sau đây minh họa cách thêm điểm đánh dấu vào bản đồ. Điểm đánh dấu được tạo tại toạ độ -33.852,151.211 (Sydney, Úc) và hiển thị chuỗi "Điểm đánh dấu ở Sydney" trong cửa sổ thông tin khi được nhấp vào.

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

      

Hiển thị thông tin bổ sung về điểm đánh dấu

Một yêu cầu phổ biến là hiển thị thêm thông tin về một địa điểm hoặc vị trí khi người dùng nhấn vào một điểm đánh dấu trên bản đồ. Xem hướng dẫn về cửa sổ thông tin.

Liên kết dữ liệu với một điểm đánh dấu

Bạn có thể lưu trữ đối tượng dữ liệu tuỳ ý bằng điểm đánh dấu bằng cách sử dụng Marker.setTag() và truy xuất đối tượng dữ liệu đó bằng Marker.getTag(). Mẫu bên dưới cho bạn biết cách tính số lần một điểm đánh dấu đã được nhấp bằng thẻ:

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

      

Dưới đây là một số ví dụ về các trường hợp hữu ích khi lưu trữ và truy xuất dữ liệu bằng điểm đánh dấu:

  • Ứng dụng của bạn có thể phục vụ nhiều loại điểm đánh dấu, và bạn muốn xử lý các điểm đánh dấu theo cách khác nhau khi người dùng nhấp vào các điểm đánh dấu đó. Để thực hiện việc này, bạn có thể lưu trữ String với điểm đánh dấu cho biết loại.
  • Bạn có thể giao tiếp với một hệ thống có các giá trị nhận dạng bản ghi duy nhất, trong đó các điểm đánh dấu đại diện cho các bản ghi cụ thể trong hệ thống đó.
  • Dữ liệu điểm đánh dấu có thể cho biết mức độ ưu tiên sẽ được sử dụng khi quyết định chỉ mục z của một điểm đánh dấu.

Làm cho một điểm đánh dấu có thể kéo

Bạn có thể định vị lại điểm đánh dấu sau khi thêm điểm đánh dấu vào bản đồ, miễn là thuộc tính draggable của bạn được đặt thành true. Nhấn và giữ điểm đánh dấu để bật tính năng kéo. Khi bạn nhả ngón tay khỏi màn hình, điểm đánh dấu sẽ vẫn ở vị trí đó.

Theo mặc định, bạn không thể kéo các điểm đánh dấu. Bạn phải đặt điểm đánh dấu một cách rõ ràng là có thể kéo được bằng MarkerOptions.draggable(boolean) trước khi thêm nó vào bản đồ hoặc Marker.setDraggable(boolean) sau khi được thêm vào bản đồ. Bạn có thể theo dõi các sự kiện kéo trên điểm đánh dấu, như mô tả trong phần Sự kiện kéo của điểm đánh dấu.

Đoạn mã dưới đây thêm một điểm đánh dấu có thể kéo tại Perth, Úc.

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

      

Tuỳ chỉnh điểm đánh dấu

Video này hướng dẫn cách sử dụng điểm đánh dấu để trực quan hóa các vị trí trên bản đồ.

Điểm đánh dấu có thể xác định một hình ảnh tùy chỉnh để hiển thị thay cho biểu tượng mặc định. Việc xác định biểu tượng bao gồm việc đặt một số thuộc tính ảnh hưởng đến hành vi hình ảnh của điểm đánh dấu.

Điểm đánh dấu hỗ trợ tùy chỉnh thông qua các thuộc tính sau:

Vị trí (Bắt buộc)
Giá trị LatLng cho vị trí của điểm đánh dấu trên bản đồ. Đây là thuộc tính bắt buộc duy nhất cho một đối tượng Marker.
Mỏ neo
Điểm sẽ hiển thị trên hình ảnh sẽ được đặt tại vị trí LatLng của điểm đánh dấu. Giá trị này mặc định ở giữa phần cuối hình ảnh.
Alpha
Đặt độ mờ của điểm đánh dấu. Giá trị mặc định là 1.0.
Tiêu đề
Một chuỗi xuất hiện trong cửa sổ thông tin khi người dùng nhấn vào điểm đánh dấu.
Đoạn mã
Văn bản bổ sung hiển thị bên dưới tiêu đề.
Biểu tượng
Một bitmap hiển thị thay cho hình ảnh điểm đánh dấu mặc định.
Có thể kéo
Đặt thành true nếu bạn muốn cho phép người dùng di chuyển điểm đánh dấu. Mặc định là false.
Hiển thị
Đặt thành false để ẩn điểm đánh dấu. Giá trị mặc định là true.
Hướng phẳng hoặc Biển quảng cáo
Theo mặc định, các điểm đánh dấu sử dụng hướng biển quảng cáo, nghĩa là chúng được vẽ hướng trên màn hình của thiết bị chứ không phải trên bề mặt của bản đồ. Việc xoay, nghiêng hoặc thu phóng bản đồ sẽ không thay đổi hướng của điểm đánh dấu. Bạn có thể đặt hướng của điểm đánh dấu là phẳng so với mặt đất. Các điểm đánh dấu phẳng xoay khi bản đồ được xoay và thay đổi phối cảnh khi bản đồ được nghiêng. Cũng giống như các điểm đánh dấu biển quảng cáo, các điểm đánh dấu phẳng giữ nguyên kích thước của chúng khi bản đồ được phóng to hoặc thu nhỏ.
Xoay
Hướng của điểm đánh dấu, được chỉ định theo độ theo chiều kim đồng hồ. Vị trí mặc định sẽ thay đổi nếu điểm đánh dấu phẳng. Vị trí mặc định cho điểm đánh dấu phẳng được căn chỉnh về phía bắc. Khi điểm đánh dấu không phẳng, vị trí mặc định sẽ hướng lên và chế độ xoay sao cho khung hình luôn hướng về phía máy ảnh.

Đoạn mã dưới đây sẽ tạo một điểm đánh dấu đơn giản, với biểu tượng mặc định.

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

      

Tuỳ chỉnh màu của điểm đánh dấu

Bạn có thể tuỳ chỉnh màu của hình ảnh đánh dấu mặc định bằng cách chuyển đối tượng BitmapDescriptor đến phương thức icon(). Bạn có thể sử dụng một tập hợp các màu được xác định trước trong đối tượng BitmapDescriptorFactory, hoặc đặt một màu đánh dấu tuỳ chỉnh bằng phương thức BitmapDescriptorFactory.defaultMarker(float hue). Màu sắc là một giá trị từ 0 đến 360, đại diện cho các điểm trên bánh xe màu.

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

      

Tùy chỉnh độ mờ điểm đánh dấu

Bạn có thể kiểm soát độ mờ của điểm đánh dấu bằng phương thức MarkOptions.alpha(). Alpha phải được chỉ định dưới dạng số thực có độ chính xác đơn nằm trong khoảng từ 0 đến 1, trong đó 0 là hoàn toàn trong suốt và 1 là hoàn toàn không trong suốt.

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

      

Tuỳ chỉnh hình ảnh điểm đánh dấu

Bạn có thể thay thế hình ảnh điểm đánh dấu mặc định bằng một hình ảnh đánh dấu tuỳ chỉnh, thường được gọi là một biểu tượng. Biểu tượng tuỳ chỉnh luôn được đặt dưới dạng BitmapDescriptor và được xác định bằng một trong các phương thức trong lớp BitmapDescriptorFactory.

fromAsset(String assetName)
Tạo điểm đánh dấu tùy chỉnh bằng cách sử dụng tên của hình ảnh Bitmap trong thư mục tài sản.
fromBitmap(Bitmap image)
Tạo điểm đánh dấu tuỳ chỉnh từ hình ảnh Bitmap.
fromFile(String fileName)
Tạo biểu tượng tuỳ chỉnh bằng tên của tệp hình ảnh Bitmap trong bộ nhớ trong.
fromPath(String absolutePath)
Tạo điểm đánh dấu tuỳ chỉnh từ đường dẫn tệp tuyệt đối của hình ảnh Bitmap.
fromResource(int resourceId)
Tạo điểm đánh dấu tùy chỉnh bằng cách sử dụng mã nhận dạng tài nguyên của hình ảnh Bitmap.

Đoạn mã dưới đây sẽ tạo một điểm đánh dấu có biểu tượng tùy chỉnh.

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

      

Làm phẳng điểm đánh dấu

Biểu tượng điểm đánh dấu thường được vẽ tương ứng với màn hình; xoay, nghiêng hoặc thu phóng bản đồ sẽ không thay đổi hướng của điểm đánh dấu. Bạn có thể đặt hướng của điểm đánh dấu là phẳng so với trái đất. Các điểm đánh dấu được định hướng theo cách này sẽ xoay khi bản đồ được xoay và thay đổi phối cảnh khi bản đồ được nghiêng. Các điểm đánh dấu phẳng sẽ giữ nguyên kích thước của chúng khi bản đồ được phóng to hoặc thu nhỏ.

Để thay đổi hướng của điểm đánh dấu, hãy đặt thuộc tính flat của điểm đánh dấu thành 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)
)

      

Xoay điểm đánh dấu

Bạn có thể xoay một điểm đánh dấu xung quanh điểm neo của Marker bằng một điểm neo.Phương thức setRotation(). Chế độ xoay được đo bằng độ theo chiều kim đồng hồ từ vị trí mặc định. Khi điểm đánh dấu phẳng trên bản đồ, vị trí mặc định là Bắc. Khi điểm đánh dấu không phẳng, vị trí mặc định sẽ hướng lên và xoay sao cho điểm đánh dấu luôn hướng về máy ảnh.

Ví dụ dưới đây xoay điểm đánh dấu 90°. Việc đặt điểm neo thành 0.5,0.5 sẽ làm cho điểm đánh dấu xoay xung quanh trung tâm, thay vì căn cứ.

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

      

Chỉ mục z-đánh dấu

Chỉ mục z chỉ định thứ tự ngăn xếp của điểm đánh dấu này, so với các điểm đánh dấu khác trên bản đồ. Một điểm đánh dấu có chỉ mục z cao sẽ được vẽ ở đầu các điểm đánh dấu có chỉ mục z thấp hơn. Giá trị z-index mặc định là 0.

Đặt chỉ mục z trên đối tượng tuỳ chọn của điểm đánh dấu bằng cách gọi MarkerOptions.zIndex(), như trong đoạn mã sau:

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

      

Bạn có thể truy cập chỉ mục z của điểm đánh dấu bằng cách gọi Marker.getZIndex() và bạn có thể thay đổi chỉ mục đó bằng cách gọi Marker.setZIndex().

Điểm đánh dấu luôn được vẽ phía trên các lớp thẻ thông tin và các lớp phủ không phải điểm đánh dấu khác (lớp phủ mặt đất, hình nhiều đường, đa giác và các hình dạng khác) bất kể chỉ mục z của các lớp phủ khác. Các điểm đánh dấu được coi là nằm trong một nhóm chỉ mục z riêng biệt so với các lớp phủ khác.

Hãy đọc về ảnh hưởng của chỉ mục z đối với các sự kiện nhấp chuột bên dưới.

Xử lý sự kiện đánh dấu

API Maps cho phép bạn nghe và phản hồi các sự kiện đánh dấu. Để theo dõi các sự kiện này, bạn phải thiết lập trình nghe tương ứng trên đối tượng GoogleMap có các điểm đánh dấu. Khi sự kiện xảy ra ở một trong các điểm đánh dấu trên bản đồ, lệnh gọi lại của trình nghe sẽ được gọi bằng đối tượng Marker tương ứng được truyền dưới dạng thông số. Để so sánh đối tượng Marker này với tham chiếu của riêng bạn với một đối tượng Marker, bạn phải sử dụng equals() chứ không phải ==.

Bạn có thể nghe những sự kiện sau:

Sự kiện lượt nhấp vào điểm đánh dấu

Bạn có thể sử dụng OnMarkerClickListener để theo dõi các sự kiện nhấp chuột trên điểm đánh dấu. Để thiết lập trình nghe này trên bản đồ, hãy gọi GoogleMap.setOnMarkerClickListener(OnMarkerClickListener). Khi người dùng nhấp vào một điểm đánh dấu, onMarkerClick(Marker) sẽ được gọi và điểm đánh dấu đó sẽ được chuyển qua làm đối số. Phương thức này trả về một giá trị boolean cho biết liệu bạn đã sử dụng sự kiện hay chưa (tức là bạn muốn ngăn chặn hành vi mặc định). Nếu nó trả về false, thì hành vi mặc định sẽ xảy ra ngoài hành vi tuỳ chỉnh của bạn. Hành vi mặc định cho sự kiện nhấp vào điểm đánh dấu là hiển thị cửa sổ thông tin (nếu có) và di chuyển máy ảnh sao cho điểm đánh dấu nằm ở giữa trên bản đồ.

Ảnh hưởng của chỉ mục z đến các sự kiện nhấp chuột:

  • Khi người dùng nhấp vào một cụm điểm đánh dấu, sự kiện nhấp sẽ được kích hoạt cho điểm đánh dấu có chỉ mục z cao nhất.
  • Hệ thống sẽ kích hoạt tối đa một sự kiện cho mỗi lượt nhấp. Nói cách khác, lượt nhấp không được chuyển đến các điểm đánh dấu hoặc lớp phủ khác có giá trị z-index thấp hơn.
  • Khi bạn nhấp vào một cụm điểm đánh dấu, các lượt nhấp tiếp theo sẽ lần lượt đi qua cụm đó và chọn từng lượt. Thứ tự của chu kỳ trước tiên ưu tiên chỉ mục z, sau đó là gần điểm nhấp chuột.
  • Nếu người dùng nhấp vào phần bên ngoài cụm, API sẽ tính toán lại cụm và đặt lại trạng thái của chu kỳ nhấp để bắt đầu từ đầu.
  • Sự kiện nhấp chuột xuyên qua các cụm điểm đánh dấu để tới các hình dạng và lớp phủ khác trước khi bắt đầu lại chu kỳ.
  • Các điểm đánh dấu được coi là nằm trong một nhóm chỉ mục z riêng biệt so với các lớp phủ hoặc hình dạng khác (đường đa giác, đa giác, vòng tròn và/hoặc lớp phủ mặt đất), bất kể chỉ số z của các lớp phủ khác. Nếu nhiều điểm đánh dấu, lớp phủ hoặc hình dạng phủ lên nhau, sự kiện nhấp chuột sẽ được xoay vòng qua cụm điểm đánh dấu trước tiên, sau đó được kích hoạt cho các lớp phủ hoặc hình dạng có thể nhấp khác, dựa trên giá trị z-index của chúng.

Sự kiện kéo đánh dấu

Bạn có thể sử dụng OnMarkerDragListener để theo dõi các sự kiện kéo trên một điểm đánh dấu. Để thiết lập trình nghe này trên bản đồ, hãy gọi GoogleMap.setOnMarkerDragListener. Để kéo một điểm đánh dấu, người dùng phải nhấn và giữ điểm đánh dấu đó. Khi người dùng rời khỏi màn hình, điểm đánh dấu sẽ ở nguyên vị trí đó. Khi một điểm đánh dấu được kéo, ban đầu, onMarkerDragStart(Marker) sẽ được gọi. Trong khi điểm đánh dấu đang được kéo, onMarkerDrag(Marker) sẽ được gọi liên tục. Ở cuối quá trình kéo onMarkerDragEnd(Marker) sẽ được gọi. Bạn có thể nhận vị trí của điểm đánh dấu bất cứ lúc nào bằng cách gọi Marker.getPosition().