Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在地图视图上显示自定义信息窗口_Java_Android_Kotlin_Mapbox_Mapbox Android - Fatal编程技术网

Java 如何在地图视图上显示自定义信息窗口

Java 如何在地图视图上显示自定义信息窗口,java,android,kotlin,mapbox,mapbox-android,Java,Android,Kotlin,Mapbox,Mapbox Android,我需要显示一个自定义信息窗口时,我点击一个pin 针直接在图层上形成样式 创建地图时,我通过url获取样式: mapView?.getMapAsync { map -> map.setStyle(Style.Builder().fromUrl("mapbox://styles/my-style")) { onMapReady(map) } } 然后我定义这个层: fun

我需要显示一个自定义信息窗口时,我点击一个pin

针直接在图层上形成样式

创建地图时,我通过url获取样式:

        mapView?.getMapAsync { map ->
            map.setStyle(Style.Builder().fromUrl("mapbox://styles/my-style")) {
                onMapReady(map)
            }
        }
然后我定义这个层:

    fun onMapReady(mapboxMap: MapboxMap) {
        this.mapboxMap = mapboxMap
        val layer = mapboxMap.style?.getLayer("my-layer")
        layer?.setProperties(visibility(Property.VISIBLE))
        mapboxMap.addOnMapClickListener(this@InfoWindowSymbolLayerActivity)
    }
OnMapClick方法:

    override fun onMapClick(point: LatLng): Boolean {
        return mapboxMap?.projection?.toScreenLocation(point)?.let { handleClickIcon(it) }!!
    }
HandleClickIcon方法:

fun handleClickIcon(screenPoint: PointF): Boolean {
        val features = mapboxMap?.queryRenderedFeatures(screenPoint, MARKER_LAYER_ID)

        val inflater = LayoutInflater.from(this)
        val bubbleLayout = inflater.inflate(R.layout.pin_info, null) as BubbleLayout

        val type = features?.get(0)?.getStringProperty(type)
        bubbleLayout.tvDefectType.text = type?.let { formatType(it) }

        val username = features?.get(0)?.getStringProperty(username)
        bubbleLayout.tvDefectInfo.text = username?.let { formatDefectInfo(it) }

        val measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
        bubbleLayout.measure(measureSpec, measureSpec)

        val measuredWidth = bubbleLayout.measuredWidth.toFloat()

        bubbleLayout.arrowPosition = measuredWidth / 2 - 5

        val bitmap = SymbolGenerator.generate(bubbleLayout)

        type?.let { mapboxMap?.style?.addImage(it, bitmap) }

        mapboxMap?.let {
            it.getStyle { style ->
                setUpInfoWindowLayer(style)
            }
        }
        return true
    }
Mapbox示例使用自定义GeoJson:

但是我需要在屏幕上方显示信息窗口
单击

如果图层已处于您的样式中,则无需使用
layer?将其可见性设置为可见。设置属性(可见性(Property.visible))
。它已经可以看到了

我想接着说:

  • 在代码的前面启动数据加载和气泡窗口
    symbolayer
    设置,而不是在
    onmaplick
    中:

  • 仅在
    onmaplick
    中更改选择状态:


如果图层已经在您的样式中,则无需使用
layer?.setProperties(可见性(Property.visible))
将其可见性设置为可见。它已经可以看到了

我想接着说:

  • 在代码的前面启动数据加载和气泡窗口
    symbolayer
    设置,而不是在
    onmaplick
    中:

  • 仅在
    onmaplick
    中更改选择状态:


在Markerclick()上你有一个方法。信息窗口不必放置在地图视图中,只需创建您自己的上方并在需要时显示。
onMarkerClick
当我单击地图@IkazuchiWell时不会触发。您有方法
onMarkerClick
()。信息窗口不必放置在地图视图中,只需创建自己的上方,并在需要时显示。
onMarkerClick
在我单击地图@Ikazuchi时不会触发