我从数据库中提取标记数据并将它们放在地图上。我想要做的是更改地图上的位置。 当有1个标记时,下面的代码正在工作。我知道多个标记的错误。我应该为多个标记做什么?
Marker otherplayermarker;
mydb.child("map").child("players").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
HashMap<String,AvatarObject> players= new HashMap();
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
players.put(childSnapshot.getKey(), childSnapshot.getValue(AvatarObject.class));
}
players.remove(username); //nvm this
for (Map.Entry<String, AvatarObject> entry : players.entrySet()) {
Log.d("asd","Key = " + entry.getKey() + ", Latitude = " + entry.getValue().getLatitude()+"Longitude = " + entry.getValue().getLongitude());
LatLng latlngotherplayer;
latlngotherplayer = new LatLng(entry.getValue().getLatitude(), entry.getValue().getLongitude());
if (otherplayermarker == null) {
MarkerOptions otherplayermarkeroptions = new MarkerOptions();
otherplayermarkeroptions.position(latlngotherplayer);
otherplayermarkeroptions.title(entry.getValue().getAvatar());
otherplayermarkeroptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.petyravatar));
Marker otherplayermarker = googleMap.addMarker(otherplayermarkeroptions);
MarkerAnimation.animateMarkerToICS(otherplayermarker, latlngotherplayer, new LatLngInterpolator.Spherical());
}else{
MarkerAnimation.animateMarkerToICS(otherplayermarker, latlngotherplayer, new LatLngInterpolator.Spherical());
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
更新: 我正在考虑创建一个hashmap并在将它们添加到map后添加标记,然后在它们的位置发生变化时以某种方式更新它。真的可以写出algorthm ......
答案 0 :(得分:0)
在更新职位前尝试清除地图
googleMap.clear()
答案 1 :(得分:0)
您可以尝试创建一个片段或另一个Google地图使其透明,然后在其中输入标记。我没有尝试过,只是一个理论。 您也可以尝试使用地火-https://github.com/firebase/geofire-java