【问题标题】:How to select and deselect a marker in google maps?如何在谷歌地图中选择和取消选择标记?
【发布时间】:2023-03-18 02:46:01
【问题描述】:

我有一个使用标记在谷歌地图中标记的地点列表。我想选择一个标记,以便它以不同的颜色突出显示。当我点击同一个标记或任何其他标记时,我想删除在第一个标记中所做的选择并将其设置回默认颜色。

这是我的 onClusterItemClick 方法

override fun onClusterItemClick(p0: Station?): Boolean {
        dragView.visibility = View.VISIBLE
        viewModel.loadStation(p0?.id!!)
        val marker = renderer.getMarker(p0)

        //save previous merker here

 marker?.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_map_pin_selected))

        return true
    }

这是我的站渲染器

/**
     * Class to design the pin point into the map
     */

    inner class StationRenderer(context: Context, map: GoogleMap,
                                clusterManager: ClusterManager<Station>) : DefaultClusterRenderer<Station>(context, map, clusterManager) {


        override fun onBeforeClusterRendered(cluster: Cluster<Station>?, markerOptions: MarkerOptions?) {
            markerOptions?.icon(BitmapDescriptorFactory.fromBitmap(createStoreMarker(cluster?.size.toString())))
        }

        override fun onBeforeClusterItemRendered(item: Station?, markerOptions: MarkerOptions?) {
            markerOptions?.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_map_pin))
        }


        private fun createStoreMarker(stationsCount:String): Bitmap {
            val markerLayout = layoutInflater.inflate(R.layout.marker_item, null)
            val markerImage = markerLayout.findViewById(R.id.marker_image) as ImageView
            val markerRating = markerLayout.findViewById(R.id.marker_text) as TextView
            markerImage.setImageResource(R.drawable.ic_map_pin)
            markerRating.text = stationsCount
            markerLayout.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED))
            markerLayout.layout(0, 0, markerLayout.getMeasuredWidth(), markerLayout.getMeasuredHeight())
            val bitmap = Bitmap.createBitmap(markerLayout.getMeasuredWidth(), markerLayout.getMeasuredHeight(), Bitmap.Config.ARGB_8888)
            val canvas = Canvas(bitmap)
            markerLayout.draw(canvas)
            return bitmap
        }


        override fun shouldRenderAsCluster(cluster: Cluster<Station>?): Boolean {
            return cluster?.size !!> 1
        }


    }

【问题讨论】:

    标签: android google-maps google-maps-markers


    【解决方案1】:

    在 googleMaps 中,这些不是选择或取消选择之类的东西,也不是专门针对 but 的某种侦听器,您有 onMarkerClick();,您可以使用此侦听器并添加一些逻辑来实现该目标。

    googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener(){
    
    @Override
    public boolean onMarkerClick(Marker marker){
         return false;
       }
    }); 
    

    你可以从这里得到想法:How to select and deselect a marker in google maps in android?

    【讨论】:

    • 我正在使用clusterItemClick,你有什么需要的吗?
    • 即使在这种情况下,您也必须在onClusterItemClick 中专门添加您的逻辑以保存前一个标记,然后选择其他一些标记重置第一个
    • 我的问题是关于逻辑 :)
    • 我之前查过,逻辑不明白,因为prevMarker是一个神奇的变量,所以我不知道它是从哪里来的
    • prevMarker vairaible 将保留对前一个的引用,默认情况下在活动开始时保留 null 并按原样执行其余操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多