如何在安卓版谷歌地图中选择和取消选择标记?

4

我有一份地点列表,这些地点在谷歌地图上使用标记(Markers)进行了标注。我希望选择一个标记(Marker),使其用不同的颜色突出显示。我使用marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))来设置它。当我点击相同的标记或其他任何标记时,我想要取消第一个标记的选择,并将其重新设置为默认颜色。

 map.setOnMarkerClickListener(new OnMarkerClickListener() {

    @Override
    public boolean onMarkerClick(Marker marker) {

        aa= marker.getPosition().latitude;
         bb=marker.getPosition().longitude;
        marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));

        }

根据上面的代码,当我点击其他标记时,第一个标记中所做的选择仍然存在,并且它保持着颜色HUE_BLUE。如何取消修改后的颜色并将选择传递给当前点击的标记?


2
你需要在一个列表或其他数据结构中跟踪所有标记。现在,当你点击一个新的标记时,请检查并删除之前的标记。 - Murtaza Khursheed Hussain
之前点击的标记InfoWindow还在显示吗?或者仅仅是标记保持蓝色? - Daniel Nugent
@DanielNugent 根据选择,没有信息窗口更改。是的,标记保持蓝色,因此当我点击下一个标记时,该标记变为蓝色。 - Hari Sankar
尝试将每个标记添加到列表中,当单击任何标记时,首先通过列表迭代取消选择所有标记,然后应用所选的点击标记。 - Haresh Chhelana
1个回答

4
我刚测试过了,它可以正常工作。只需将Marker引用作为实例变量添加,以便保留最后单击的Marker的引用,并在每次单击新的Marker时将上一个设置回默认颜色。
您还可以在设置MarkerHUE_BLUE之前检查!marker.equals(prevMarker),这将允许在Marker上随后的单击将颜色设置回默认颜色。
实例变量:
Marker prevMarker;

点击监听器:

mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

        @Override
        public boolean onMarkerClick(Marker marker) {

            aa= marker.getPosition().latitude;
            bb=marker.getPosition().longitude;
            if (prevMarker != null) {
                //Set prevMarker back to default color
                prevMarker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
            }

            //leave Marker default color if re-click current Marker
            if (!marker.equals(prevMarker)) {
                marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
                prevMarker = marker;
            }
            prevMarker = marker;
            return false;
        }

    }); 

我想根据其他类返回的响应来改变颜色,如下所示: if (marker.getSnippet().equals(currentEvent.getButton_one())) { response.setTextColor(context.getResources().getColor(R.color.green)); } else response.setTextColor(context.getResources().getColor(R.color.red));marker.getSnippet() 的值为 Y 或 N,取决于用户按下的按钮。我想使用 currentEvent.getButton_one() 来检查这一点,它会给出第一个按钮的值。 - silent_programmer
问题在于我在其他类中获取currentEvent.getButton_one()的正确值,但在CustomInfoWindow类中却没有。最终条件应该像这样检查: 如果Y == Y ---> 绿色,否则红色。 - silent_programmer
@AtharvaPuranik,如果你需要帮助解决问题,请打开一个新的问题并发布你的代码,我会帮你看看! - Daniel Nugent
请问您需要英文原文的翻译,还是将该网页中的内容翻译成中文呢? - silent_programmer
@DanielNugent 我有四个带有不同图标的标记。如果我点击其中一个,它应该被选中并显示特定的图标。如果我点击另一个标记,则先前的标记应该取消选择,并且当前的图标应该被选中并显示其特定的图标,以此类推。你能帮我吗? - Code Hunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接