更新多个标记位置Android Google地图

时间:2018-02-17 20:57:29

标签: android google-maps firebase

我从数据库中提取标记数据并将它们放在地图上。我想要做的是更改地图上的位置。 当有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 ......

2 个答案:

答案 0 :(得分:0)

在更新职位前尝试清除地图

googleMap.clear()

答案 1 :(得分:0)

您可以尝试创建一个片段或另一个Google地图使其透明,然后在其中输入标记。我没有尝试过,只是一个理论。 您也可以尝试使用地火-https://github.com/firebase/geofire-java