Veri özelliklerinin click
etkinliklerine yanıt vermesini sağlayın ve bunları, kullanıcı etkileşimine göre bir özelliğin görünümünü değiştirmek için kullanın.
Tıklama etkinlik işleyici yazma
Bir özellik katmanında tıklama etkinliği gerçekleştiğinde Android için Haritalar SDK'sı etkinlik işleyiciye bir FeatureClickEvent
nesnesi iletir.
Tıklamadan etkilenen özelliklerin listesini almak için FeatureClickEvent.getFeatures()
yöntemini kullanın.
Özellik katmanı etkinliklerini işleme
Veri kümeleri katmanındaki etkinlikleri işlemek için aşağıdaki adımları uygulayın. Bu örnekte, seçili özelliği temsil eden poligona mavi bir dolgu ve kenarlık uygularsınız.
FeatureLayer.setFeatureStyle()
işlevini çağırdığınızda stil fabrikası işlevi, veri kümesindeki tüm özelliklerde özellik stilini ayarlar. Etkinlik işleyicideki bir veri kümesinin stilini güncellemek için tüm veri kümesi özelliklerinde güncellenmiş stili ayarlamak üzere FeatureLayer.setFeatureStyle()
yöntemini çağırmanız gerekir.
Henüz yapmadıysanız yeni bir harita kimliği ve harita stili oluşturmak için Başlarken bölümündeki adımları uygulayın. Veri kümeleri özellik katmanını etkinleştirdiğinizden emin olun.
Sınıfınızda
FeatureLayer.OnFeatureClickListener
'in uygulandığından emin olun.FeatureLayer.addOnFeatureClickListener()
numaralı telefonu arayarak özellik tıklama etkinlikleri için bir etkinlik işleyici kaydedin.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(); } }Seçilen özelliğe mavi, diğer tüm özelliklere yeşil dolgu rengi uygulayın. Yalnızca görünür özellikler tıklanabilir.
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); }