2016-03-25 81 views
0

我在我的應用程序中有一個地圖活動,我試圖在打開地圖活動時進行地圖活動,它會自動放大到我的位置,但實際上它會每隔幾秒放大一次。地圖活動每隔幾秒放大一次

這是我的代碼:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 
private static final String FIREBASE_URL="https://****.firebaseio.com/"; 
private Firebase firebaseRef; 
private LocationManager locationManager; 
private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps2); 
    Firebase.setAndroidContext(this); 
    firebaseRef = new Firebase(FIREBASE_URL); 

    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
    setUpMapIfNeeded(); 
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 

     @Override 
     public boolean onMarkerClick(Marker marker) { 
      final String title = marker.getTitle().toString(); 

      firebaseRef.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for (DataSnapshot user : dataSnapshot.child("users").getChildren()) { 
         String event_title = user.child("event/event_title").getValue().toString(); 
         if (title.equals(event_title)) { 

          String event_date = user.child("event/event_date").getValue().toString(); 
          String event_content = user.child("event/event_content").getValue().toString(); 
          String age_limit = user.child("event/age_limit").getValue().toString(); 
          String event_hour = user.child("event/event_hour").getValue().toString(); 
          String location_left = user.child("location_left").getValue().toString(); 
          String location_right = user.child("location_right").getValue().toString(); 
          final SharedPreferences sp = getSharedPreferences("key", 0); 
          final SharedPreferences.Editor sedt = sp.edit(); 

          sedt.putString("event_title", event_title); 
          sedt.putString("event_date", event_date); 
          sedt.putString("event_content", event_content); 
          sedt.putString("age_limit", age_limit); 
          sedt.putString("event_hour", event_hour); 
          sedt.putString("location_left", location_left); 
          sedt.putString("location_right", location_right); 
          sedt.commit(); 

         } 

        } 
        Intent intent = new Intent(MapsActivity.this, EventInfo.class); 
        startActivity(intent); 
       } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 

       } 
      }); 



    return true; 
     } 
    }); 

} 

private void setUpMapIfNeeded() { 
    if (mMap == null) { 
     // Try to obtain the map from the SupportMapFragment. 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
     if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
       == PackageManager.PERMISSION_GRANTED) { 
      mMap.setMyLocationEnabled(true); 
     } else { 
      Toast.makeText(MapsActivity.this, "You have to accept!", Toast.LENGTH_LONG).show(); 
      if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
        == PackageManager.PERMISSION_GRANTED) { 
       mMap.setMyLocationEnabled(true); 
      } 
     } 

     if (mMap != null) { 


      mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 

       @Override 
       public void onMyLocationChange(Location arg0) { 

        CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(arg0.getLatitude(), arg0.getLongitude())); 
        CameraUpdate zoom=CameraUpdateFactory.zoomTo(12); 

        mMap.moveCamera(center); 
        mMap.animateCamera(zoom); 
       } 
      }); 

     } 
    } 
} 


@Override 
public void onMapReady(final GoogleMap googleMap) { 

    mMap=googleMap; 
    firebaseRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot child : dataSnapshot.child("users").getChildren()) { 


       String rightLocation = child.child("location_right").getValue().toString(); 
       String leftLocation = child.child("location_left").getValue().toString(); 

       double location_left = Double.parseDouble(leftLocation); 
       double location_right = Double.parseDouble(rightLocation); 
       String event_title = child.child("event/event_title").getValue().toString(); 
       LatLng cod = new LatLng(location_left, location_right); 
       googleMap.addMarker(new MarkerOptions().position(cod).title(event_title)); 


      } 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 


} 

}

我可以猜到,這是我setUpMapIfNeeded()方法的問題,但我不能發現問題。

我在做什麼錯?

回答

0

的問題是由於下面的代碼

   CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(arg0.getLatitude(), arg0.getLongitude())); 
       CameraUpdate zoom=CameraUpdateFactory.zoomTo(12); 
       mMap.moveCamera(center); 
       mMap.animateCamera(zoom); 

由於onMyLocationChange監聽器獲取調用時,他們是位置的任何變化。

因此,如果您需要將地圖中心更改爲最新位置,那麼您必須編寫代碼來檢查之前位置之間的實際位移。

如果實際發生了位移,那麼只有您可以更改地圖的中心和縮放。

+0

好吧,那麼我可以在我的代碼中更改它以使其工作? –

+0

刪除此代碼。 mMap.setOnMyLocationChangeListener(新GoogleMap.OnMyLocationChangeListener(){ @Override 公共無效onMyLocationChange(位置爲arg0){ 的CameraUpdate中心= CameraUpdateFactory.newLatLng(新經緯度(arg0.getLatitude(),arg0.getLongitude())); 的CameraUpdate變焦= CameraUpdateFactory.zoomTo(12); mMap.moveCamera(中心); mMap.animateCamera(變焦); } }); – Abhi

相關問題