当用户移动时,定期将地图上的所有标记移动到其更新的/新的当前位置

时间:2017-02-15 14:24:48

标签: android google-maps google-maps-markers google-maps-android-api-2 android-maps-v2

我正在开发一个Android应用程序,其中一些用户从他们的设备打开相同的活动。此活动中有一张地图,当用户从其设备中打开此活动时,会从Firebase获取其位置坐标,并在地图上显示基于这些坐标的标记。

这是我的代码:

    acceptingUserReference.child(requestID).child(key).addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {

                                    if (dataSnapshot.getValue() != null) {
                                            final Map<String, String> newAcceptedUser = (Map<String, String>) dataSnapshot.getValue();

                                            nameOfP.add(newAcceptedUser.get("pName"));                      
                                            cLatP.add(newAcceptedUser.get("currentLat").trim());
                                            cLngP.add(newAcceptedUser.get("currentLng").trim());

                                            addMarkers();

                                            //Check map is loaded
                                            mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                                                @Override
                                                public void onMapLoaded() {
                                                     mMap.getUiSettings().setZoomControlsEnabled(true);
                                                    mMap.getUiSettings().setMapToolbarEnabled(true);
                                                    mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                                                    mMap.setMaxZoomPreference(19.0f);  mMap.setMyLocationEnabled(true);

                                                }
                                            });
                                @Override
                                public void onCancelled(DatabaseError databaseError) {

                                }
                            });

这是addMarkers()方法:

public void addMarkers() {
        mMap.clear();
        venueMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(venueLat), Double.parseDouble(venueLng)));
        markersList.add(venueMarker);
        for (int i = 0; i < nameOfP.size(); i++) {
            p = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.valueOf(cLatP.get(i)), Double.valueOf(cLngP.get(i)))).title(nameOfP.get(i).trim()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
            markersList.add(pMarker);
        }
}

这是onLocationChanged()

@Override
public void onLocationChanged(Location location) {
    mCurrentLocation = location;
    currentLtAU = mCurrentLocation.getLatitude();
    currentLnAU = mCurrentLocation.getLongitude();
}

用户不断前往特定位置。

我想要的是在用户移动时将相应的标记移动到新位置,以便每个人都可以看到每个人当前所在的位置。请帮我搞清楚。

3 个答案:

答案 0 :(得分:0)

保存addMarker的结果,然后调用setPosition(addMarker的结果)。

答案 1 :(得分:0)

您的代码似乎没有任何问题。对不起,我找不到它有什么问题,但是这里有一个文件可以作为指导来找到问题:

http://pastebin.com/9qq484Fz

我希望你尽快解决问题! (为凌乱的代码道歉,它已经很老了)

答案 2 :(得分:0)

1。每当调用onLocationChanged表示用户移动到某个距离时。

更新用户在Firebase onLocationChanged的更新位置,以便其他用户可以找到您更新的位置。

注意:使用geofire更新用户位置并查看此answer

@Override
public void onLocationChanged(Location location) {
mCurrentLocation = location;
currentLtAU = mCurrentLocation.getLatitude();
currentLnAU = mCurrentLocation.getLongitude();
}

2。在您成功将用户位置更新为acceptingUserReference.child(requestID)时调用Firebase代码