2016-03-25 3 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

問題は、場所の変更がそのときonMyLocationChangeリスナーが呼び出さなっているように、コード

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

以下にあります。

地図の中心を最新の場所に変更する必要がある場合は、前の場所の間の実際の移動を確認するコードを作成してください。

実際に位置がずれてしまった場合は、地図の中心とズームを変更することができます。

+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