首页 > 解决方案 > 标记有时会在点击时改变颜色,有时不会

问题描述

我有这个应用程序,我在谷歌地图上显示附近药店的标记。当我单击标记时,我希望标记改变颜色。当我单击其他标记时,它应该将先前标记的颜色更改为默认值,并将更改新标记的颜色。这是随机工作的,我的意思是有时标记颜色会发生变化,有时它会保持默认颜色。

Marker lastClicked;

public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in user's location
    // User's location is taken from the postal code entered


    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            if(lastClicked != null){
                lastClicked.setIcon(BitmapDescriptorFactory.defaultMarker());
            }
            marker.setIcon(getMarkerIcon(getResources().getColor(R.color.app_color)));

            lastClicked=marker;
            return false;
        }
    });
}

getMarkerIcon() 方法的代码是:

public BitmapDescriptor getMarkerIcon(int color){
    float[] hsvFloat = new float[3];
    Color.colorToHSV(color, hsvFloat);
    return BitmapDescriptorFactory.defaultMarker(hsvFloat[0]);
}

注意:我在每一行都添加了调试器以查看代码的哪些部分没有运行,奇怪的是当调试器来到这一行时

marker.setIcon(getMarkerIcon(getResources().getColor(R.color.app_color)));

它正在编译,但有时它不会改变标记的颜色。

标签: androidandroid-studiogoogle-mapsgoogle-maps-markers

解决方案


我通过检查我的标记列表解决了这个问题。从中我发现有完全相同的 lat 和 lng 标记,这就是标记重叠的原因,这意味着一个标记上有超过 1 个标记

 public boolean isDuplicate(Pharmacy pharmacy){

        for(int i=0; i<pharmacyList.size(); i++){

            if(pharmacyList.get(i).getLatitude() == pharmacy.getLatitude()

                    &&pharmacyList.get(i).getLongitude() == pharmacy.getLongitude())

                return true;

        }

        return false;

    }

注意:药房是具有 lat 和 lng 属性的类。


推荐阅读