Menangani peristiwa klik

Pilih platform: Android iOS JavaScript

Buat fitur data merespons peristiwa click, dan menggunakannya untuk mengubah tampilan fitur berdasarkan interaksi pengguna.

Screenshot yang menampilkan data poligon yang telah ditata gayanya.

Menulis pengendali peristiwa klik

Saat peristiwa klik terjadi di lapisan fitur, Maps SDK for Android akan meneruskan FeatureClickEvent ke pengendali peristiwa.

Gunakan metode FeatureClickEvent.getFeatures() untuk mendapatkan daftar fitur yang terpengaruh oleh klik.

Menangani peristiwa lapisan fitur

Lakukan langkah-langkah berikut untuk menangani peristiwa di lapisan Set data. Di sini misalnya, Anda menerapkan isian dan batas warna biru ke poligon yang mewakili fitur yang dipilih.

Saat Anda menelepon FeatureLayer.setFeatureStyle(), fungsi factory style menetapkan gaya fitur pada semua fitur dalam {i>dataset<i} aslinya. Untuk memperbarui gaya set data di pengendali peristiwa, Anda harus panggil FeatureLayer.setFeatureStyle() untuk menetapkan gaya yang diperbarui di semua set data baru.

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

  2. Pastikan class Anda menerapkan FeatureLayer.OnFeatureClickListener

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

    Kotlin

    private var datasetLayer: FeatureLayer? = null
    // The globalid of the clicked dataset feature.
    var lastGlobalId: String? = null
    override fun onMapReady(googleMap: GoogleMap) { // Get the DATASET feature layer. datasetLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build())
    // Register the click event handler for the Datasets layer. datasetLayer?.addOnFeatureClickListener(this)
    // Apply default style to all features on load to enable clicking. styleDatasetsLayer() }
    // Define the click event handler to set lastGlobalId to globalid of selected feature. override fun onFeatureClick(event: FeatureClickEvent) { // Get the dataset feature affected by the click. val clickFeatures: MutableList<Feature> = event.features lastGlobalId = null if (clickFeatures.get(0) is DatasetFeature) { lastGlobalId = ((clickFeatures.get(0) as DatasetFeature).getDatasetAttributes().get("globalid")) // Remember to reset the Style Factory. styleDatasetsLayer() } }

    Java

    private FeatureLayer datasetLayer;
    // The globalid of the clicked dataset feature.
    String lastgobalid = null;
    @Override public void onMapReady(GoogleMap map) {
    // Get the DATASET feature layer. datasetLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build());
    // Register the click event handler for the Datasets layer. datasetLayer.addOnFeatureClickListener(this);
    // Apply default style to all features on load to enable clicking. styleDatasetsLayer(); }
    @Override // Define the click event handler. public void onFeatureClick(FeatureClickEvent event) { // Get the dataset feature affected by the click. List<Feature> clickFeatures = event.getFeatures(); lastgobalid = null; if (clickFeatures.get(0) instanceof DatasetFeature) { lastgobalid = ((DatasetFeature) clickFeatures.get(0)).getDatasetAttributes().get("globalid"); // Remember to reset the Style Factory. styleDatasetsLayer(); } }

  4. Terapkan warna pengisi biru untuk fitur yang dipilih dan hijau untuk fitur lainnya baru. Hanya fitur yang terlihat yang dapat diklik.

    Kotlin

    // Set fill and border for all features.
    private fun styleDatasetsLayer() {
        // Create the style factory function.
        val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
    // Check if the feature is an instance of DatasetFeature. if (feature is DatasetFeature) { val globalIDs: MutableMap<String, String> = feature.getDatasetAttributes() // Determine globalid attribute. val globalID = globalIDs!!["globalid"] // Set default colors to to green. var fillColor = 0x800000ff var strokeColor = 0xff0000ff if (globalID == lastGlobalId) { // Color selected area blue. fillColor = 0x8000ff00 strokeColor = 0xff00ff00 } return@StyleFactory FeatureStyle.Builder() .fillColor(fillColor) .strokeColor(strokeColor) .build() } return@StyleFactory null }
    // Apply the style factory function to the dataset feature layer. datasetLayer?.setFeatureStyle(styleFactory) }

    Java

    // Set default green fill and border for all features.
    private void styleDatasetsLayer() {
      // Create the style factory function.
      FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
    // Check if the feature is an instance of DatasetFeature. if (feature instanceof DatasetFeature) {
    // Check if "globalid" attribute of feature is the "globalid" of clicked feature. Map<String, String> globalIDs = ((DatasetFeature) feature).getDatasetAttributes(); String globalID = globalIDs.get("globalid"); // Set default colors to green. int fillColor = 0x4000ff00; int strokeColor = 0xff00ff00; if (Objects.equals(globalID, lastgobalid)) { // Color selected area blue. fillColor = 0x400000ff; strokeColor = 0xff0000ff; } return new FeatureStyle.Builder() .fillColor(fillColor) .strokeColor(strokeColor) .strokeWidth(2) .build(); } return null; };
    // Apply the style factory function to the feature layer. datasetLayer.setFeatureStyle(styleFactory); }