Menangani peristiwa klik

Pilih platform: Android iOS JavaScript

Anda dapat membuat lapisan fitur merespons peristiwa click pengguna untuk mendapatkan ID tempat dan jenis fitur untuk batas yang diklik. Contoh peta berikut menunjukkan batas untuk lapisan Negara, dan menampilkan pengendali peristiwa yang menata gaya poligon yang diklik yang terkait dengan negara yang dipilih.

Menulis pengendali peristiwa klik

Saat peristiwa klik terjadi pada lapisan fitur, Maps SDK for Android akan meneruskan objek FeatureClickEvent ke pengendali peristiwa. Gunakan FeatureClickEvent untuk mendapatkan garis lintang dan bujur klik serta daftar fitur yang terpengaruh oleh klik.

Menangani peristiwa lapisan fitur

Lakukan langkah-langkah berikut untuk menangani peristiwa di lapisan fitur. Dalam contoh ini, Anda menentukan pengendali peristiwa klik untuk lapisan fitur Negara guna menerapkan isian merah ke poligon yang mewakili negara yang dipilih.

Saat Anda menelepon FeatureLayer.setFeatureStyle(), fungsi factory style menetapkan gaya pada semua fitur dalam lapisan fitur. Untuk memperbarui gaya fitur di pengendali peristiwa, Anda harus panggil FeatureLayer.setFeatureStyle() untuk menetapkan gaya yang diperbarui di semua baru.

  1. Jika Anda belum melakukannya, ikuti langkah-langkah berikut Memulai untuk membuat gaya peta dan ID peta baru. Pastikan untuk mengaktifkan opsi Negara lapisan fitur.

  2. Pastikan class Anda menerapkan FeatureLayer.OnFeatureClickListener

  3. Daftarkan pengendali peristiwa untuk peristiwa klik fitur dengan memanggil FeatureLayer.addOnFeatureClickListener().

    Java

    private FeatureLayer countryLayer;
    @Override public void onMapReady(GoogleMap map) {
    // Get the COUNTRY feature layer. countryLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.COUNTRY) .build());
    // Register the click event handler for the Country layer. countryLayer.addOnFeatureClickListener(this);
    // Apply default style to all countries on load to enable clicking. styleCountryLayer(); }
    // Set default fill and border for all countries to ensure that they respond // to click events. private void styleCountryLayer() { FeatureLayer.StyleFactory styleFactory = (Feature feature) -> { return new FeatureStyle.Builder() // Set the fill color for the country as white with a 10% opacity. .fillColor(Color.argb(0.1, 0, 0, 0)) // Set border color to solid black. .strokeColor(Color.BLACK) .build(); };
    // Apply the style factory function to the country feature layer. countryLayer.setFeatureStyle(styleFactory); }

    Kotlin

    private var countryLayer: FeatureLayer? = null
    override fun onMapReady(googleMap: GoogleMap) { // Get the COUNTRY feature layer. countryLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.COUNTRY) .build())
    // Register the click event handler for the Country layer. countryLayer?.addOnFeatureClickListener(this)
    // Apply default style to all countries on load to enable clicking. styleCountryLayer() }
    // Set default fill and border for all countries to ensure that they respond // to click events. private fun styleCountryLayer() { val styleFactory = FeatureLayer.StyleFactory { feature: Feature -> return@StyleFactory FeatureStyle.Builder() // Set the fill color for the country as white with a 10% opacity. .fillColor(Color.argb(0.1f, 0f, 0f, 0f)) // Set border color to solid black. .strokeColor(Color.BLACK) .build() }
    // Apply the style factory function to the country feature layer. countryLayer?.setFeatureStyle(styleFactory) }

  4. Terapkan warna pengisi merah untuk negara yang dipilih. Hanya fitur yang dapat dilihat yang dapat diklik.

    Java

    @Override
    // Define the click event handler.
    public void onFeatureClick(FeatureClickEvent event) {
    // Get the list of features affected by the click using // getPlaceIds() defined below. List<String> selectedPlaceIds = getPlaceIds(event.getFeatures());
    if (!selectedPlaceIds.isEmpty()) { FeatureLayer.StyleFactory styleFactory = (Feature feature) -> { // Use PlaceFeature to get the placeID of the country. if (feature instanceof PlaceFeature) { if (selectedPlaceIds.contains(((PlaceFeature) feature).getPlaceId())) { return new FeatureStyle.Builder() // Set the fill color to red. .fillColor(Color.RED) .build(); } } return null; };
    // Apply the style factory function to the feature layer. countryLayer.setFeatureStyle(styleFactory); } }
    // Get a List of place IDs from the FeatureClickEvent object. private List<String> getPlaceIds(List<Feature> features) { List<String> placeIds = new ArrayList<>(); for (Feature feature : features) { if (feature instanceof PlaceFeature) { placeIds.add(((PlaceFeature) feature).getPlaceId()); } } return placeIds; }

    Kotlin

    // Define the click event handler.
    override fun onFeatureClick(event: FeatureClickEvent) {
    // Get the list of features affected by the click using // getPlaceIds() defined below. val selectedPlaceIds = getPlaceIds(event.getFeatures()) if (!selectedPlaceIds.isEmpty()) { val styleFactory = FeatureLayer.StyleFactory { feature: Feature -> // Use PlaceFeature to get the placeID of the country. if (feature is PlaceFeature) { if (selectedPlaceIds.contains((feature as PlaceFeature).getPlaceId())) { return@StyleFactory FeatureStyle.Builder() // Set the fill color to red. .fillColor(Color.RED) .build() } } return@StyleFactory null }
    // Apply the style factory function to the feature layer. countryLayer?.setFeatureStyle(styleFactory) } }
    // Get a List of place IDs from the FeatureClickEvent object. private fun getPlaceIds(features: List<Feature>): List<String> { val placeIds: MutableList<String> = ArrayList() for (feature in features) { if (feature is PlaceFeature) { placeIds.add((feature as PlaceFeature).getPlaceId()) } } return placeIds }