Je suis en train d'essayer de faire une mise en page en onglets comme sur le Play Store. J'ai réussi à afficher la mise en page en onglets en utilisant des fragments et viewpager du site androidhive. Cependant, je n'arrive pas à implémenter google maps v2 dessus. J'ai déjà passé des heures à chercher sur internet, mais je ne trouve pas de tutoriel sur comment le faire. Est-ce que quelqu'un pourrait s'il vous plaît me montrer comment faire?
Réponses
Trop de publicités?En utilisant ce code, nous pouvons configurer MapView n'importe où, à l'intérieur de n'importe quel ViewPager ou Fragment ou Activité.
Dans la dernière mise à jour de Google pour Maps, seule MapView est prise en charge pour les fragments. MapFragment & SupportMapFragment n'ont pas fonctionné pour moi.
Mise en place de la mise en page pour afficher la carte dans le fichier location_fragment.xml
:
Maintenant, nous configurons la classe Java pour afficher la carte dans le fichier MapViewFragment.java
:
public class MapViewFragment extends Fragment {
MapView mMapView;
private GoogleMap googleMap;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.location_fragment, container, false);
mMapView = (MapView) rootView.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState);
mMapView.onResume(); // nécessaire pour afficher la carte immédiatement
try {
MapsInitializer.initialize(getActivity().getApplicationContext());
} catch (Exception e) {
e.printStackTrace();
}
mMapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap mMap) {
googleMap = mMap;
// Pour afficher un bouton de déplacement vers mon emplacement
googleMap.setMyLocationEnabled(true);
// Pour déposer un marqueur à un point sur la carte
LatLng sydney = new LatLng(-34, 151);
googleMap.addMarker(new MarkerOptions().position(sydney).title("Titre du marqueur").snippet("Description du marqueur"));
// Pour zoomer automatiquement sur l'emplacement du marqueur
CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
});
return rootView;
}
@Override
public void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mMapView.onLowMemory();
}
}
Enfin, vous devez obtenir la clé API pour votre application en enregistrant votre application sur Google Cloud Console. Enregistrez votre application en tant qu'application Android native.
L'approche suivante fonctionne pour moi.
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
/**
* Un fragment qui lance d'autres parties de l'application de démonstration.
*/
public class MapFragment extends Fragment {
MapView mMapView;
private GoogleMap googleMap;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// inflat and return the layout
View v = inflater.inflate(R.layout.fragment_location_info, container,
false);
mMapView = (MapView) v.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState);
mMapView.onResume();// needed to get the map to display immediately
try {
MapsInitializer.initialize(getActivity().getApplicationContext());
} catch (Exception e) {
e.printStackTrace();
}
googleMap = mMapView.getMap();
// latitude and longitude
double latitude = 17.385044;
double longitude = 78.486671;
// create marker
MarkerOptions marker = new MarkerOptions().position(
new LatLng(latitude, longitude)).title("Hello Maps");
// Changing marker icon
marker.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
// adding marker
googleMap.addMarker(marker);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(17.385044, 78.486671)).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
// Perform any camera updates here
return v;
}
@Override
public void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mMapView.onLowMemory();
}
}
fragment_location_info.xml
Dernières nouveautés avec getMapAsync
au lieu de l'ancienne méthode dépréciée.
1. vérifier le manifeste pour
Vous pouvez obtenir la clé API pour votre application en enregistrant votre application sur Google Cloud Console
. Enregistrez votre application en tant qu'application Android native.
2. dans votre fichier de mise en page du fragment .xml ajoutez FrameLayout (pas de fragment) :
ou la hauteur que vous voulez
3. Dans onCreateView de votre fragment
private SupportMapFragment mSupportMapFragment;
mSupportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapwhere);
if (mSupportMapFragment == null) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mSupportMapFragment = SupportMapFragment.newInstance();
fragmentTransaction.replace(R.id.mapwhere, mSupportMapFragment).commit();
}
if (mSupportMapFragment != null)
{
mSupportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override public void onMapReady(GoogleMap googleMap) {
if (googleMap != null) {
googleMap.getUiSettings().setAllGesturesEnabled(true);
-> marker_latlng // FAITES DE CECI CE QUE VOUS VOULEZ
CameraPosition cameraPosition = new CameraPosition.Builder().target(marker_latlng).zoom(15.0f).build();
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
googleMap.moveCamera(cameraUpdate);
}
}
});
Voici ce que j'ai fait en détail :
À partir de là, vous pouvez obtenir la clé d'API Google Maps
autre moyen simple
connectez-vous d'abord à votre compte Google et visitez les bibliothèques Google et sélectionnez Google Maps Android API
dépendance trouvée dans l'activité de carte par défaut dans Android Studio :
compile 'com.google.android.gms:play-services:10.0.1'
mettez votre clé dans le fichier manifeste Android sous l'application comme ci-dessous
dans AndroidMainifest.xml, apportez ces modifications :
// permission requise
// clé d'API Google Maps à mettre sous/à l'intérieur de
// android:value="VOTRE CLÉ D'API"
Code du fragment :
public class MainBranchFragment extends Fragment implements OnMapReadyCallback{
private GoogleMap mMap;
public MainBranchFragment() {
// Constructeur public vide requis
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate le layout pour ce fragment
View view= inflater.inflate(R.layout.fragment_main_branch, container, false);
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.main_branch_map);
mapFragment.getMapAsync(this);
return view;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
LatLng UCA = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(UCA).title("VOTRE TITRE")).showInfoWindow();
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(UCA,17));
}
}
dans votre XML de fragment :
- Réponses précédentes
- Plus de réponses