android - 标记有时会在点击时改变颜色,有时不会
问题描述
我有这个应用程序,我在谷歌地图上显示附近药店的标记。当我单击标记时,我希望标记改变颜色。当我单击其他标记时,它应该将先前标记的颜色更改为默认值,并将更改新标记的颜色。这是随机工作的,我的意思是有时标记颜色会发生变化,有时它会保持默认颜色。
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)));
它正在编译,但有时它不会改变标记的颜色。
解决方案
我通过检查我的标记列表解决了这个问题。从中我发现有完全相同的 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 属性的类。
推荐阅读
- styled-components - 是否有人致力于让样式化组件 CSS 道具与 esbuild “本机”一起使用?
- python - tensorflow 模型显示值错误可能是初始化程序
- javascript - PreSelected Ion-checkbox 使用从 API 端给出的 id
- javascript - JS中route.param常量应该如何分隔?
- android - 初始屏幕中徽标后面的黑色
- go - 旋转的矩形被移动(SVG - 旋转矩阵)
- android - OkHttp3 缓存使用 Retrofit 2 - 返回多个用户的缓存值,即使没有缓存它们应该是不同的
- java - 如何使 JMenu 的 FocusEvent 不是临时的?
- vba - 使用 VBA 将本地存储照片发送到 Telegram
- maven - 如何使用 gradle 在 github 中创建 gradle 存储库或 maven 存储库