2016-11-24 1 views
2

J'ai fait le show de localisation actuel sur google map, mais je veux corriger le marqueur au centre sur la carte quand on sélectionne "autoPlace city" puis cet emplacement est montré sur google map.Comment réparer le marqueur sur google map et déplacer la carte?

Mon code est ci-dessous:

public class PostAdsFragmentFifth extends Fragment implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

private static final String TAG = PostAdsFragmentFifth.class.getSimpleName(); 
private CustomTextView tvBackBtn; 
PlaceAutocompleteFragment autocompleteFragment; 
private GoogleMap mMap; 
Address address; 
protected GoogleApiClient mGoogleApiClient; 
private Marker marker; 
private SupportMapFragment mapFragment; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_post_slide5, container, false); 
    checkGpsEnabled(); 
    setGooglePlaces(); 
    mapFragment = (SupportMapFragment) this.getChildFragmentManager() 
      .findFragmentById(R.id.map); 
    tvBackBtn = (CustomTextView) getActivity().findViewById(R.id.tvBack); 
    tvBackBtn.setVisibility(View.VISIBLE); 
    tvBackBtn.setOnClickListener(this); 
    return view; 
} 


@Override 
public void onStart() { 
    super.onStart(); 
    checkPermissions(); 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mGoogleApiClient != null) 
     mGoogleApiClient.disconnect(); 
} 

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.tvBack: 
      MixPanelEvents.addMixPanelEvents(getActivity(), "Pet Address for Back"); 

      if (getUserVisibleHint()) 
       ((PostAdsActivity) getActivity()).gotoNext(4); 
      break; 

    } 
} 

private void setGooglePlaces() { 
    autocompleteFragment = (PlaceAutocompleteFragment) getActivity().getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 
    autocompleteFragment.setHint(getResources().getString(R.string.address_hint_toast)); 

    AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() 
      .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS) 
      .build(); 
    autocompleteFragment.setFilter(typeFilter); 

    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
     @Override 
     public void onPlaceSelected(Place place) { 

      address = new Address(); 
      address.setLatitude(place.getLatLng().latitude); 
      address.setLongitude(place.getLatLng().longitude); 
      address.setAddress(place.getAddress().toString()); 
      address.setLandmark(place.getName().toString()); 
      PostAdsActivity.postData.setAddress(address); 

     } 

     @Override 
     public void onError(Status status) { 
      // TODO: Handle the error. 
      LogUtils.i(TAG, "An error occurred: " + status); 
     } 
    }); 
} 


protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
      .addConnectionCallbacks(this) 
      .addApi(LocationServices.API) 
      .addApi(Places.GEO_DATA_API) 
      .addApi(Places.PLACE_DETECTION_API) 
      .build(); 
    mGoogleApiClient.connect(); 
} 


@Override 
public void onConnected(Bundle bundle) { 
    Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
    if (mLastLocation != null) { 
     double lat = mLastLocation.getLatitude(); 
     double lng = mLastLocation.getLongitude(); 
     if (lat != 0 && lng != 0) { 
      mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 16.0f)); 
      convertLocationToAddress(new LatLng(lat, lng)); 
      if (marker != null) { 
       MarkerOptions markerOptions = new MarkerOptions().position(new LatLng(lat, lng)); 
       marker = mMap.addMarker(markerOptions); 
      } 
     } 

    } 
} 

private void checkPermissions() { 
    if (Build.VERSION.SDK_INT >= 23 && getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
      && getActivity().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     ArrayList<String> permissons = new ArrayList<>(); 
     permissons.add(Manifest.permission.ACCESS_FINE_LOCATION); 
     permissons.add(Manifest.permission.ACCESS_COARSE_LOCATION); 
     String[] items = permissons.toArray(new String[permissons.size()]); 
     requestPermissions(items, 4); 
    } else { 
     mapFragment.getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap googleMap) { 
       mMap = googleMap; 
       setUpMap(); 
       buildGoogleApiClient(); 
      } 
     }); 
    } 
} 

private void setUpMap() { 
    if (Utility.isAppInstalled(getActivity(), "com.google.android.apps.maps")) { 
     mMap.setMyLocationEnabled(true); 

     mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
      @Override 
      public boolean onMarkerClick(Marker marker) { 

       LatLng currentLocation = marker.getPosition(); 
       convertLocationToAddress(currentLocation); 
       return false; 
      } 
     }); 
     mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() { 

      @Override 
      public void onMarkerDragStart(Marker marker) { 

      } 

      @Override 
      public void onMarkerDragEnd(Marker marker) { 
       LatLng currentLocation = marker.getPosition(); 
       convertLocationToAddress(currentLocation); 
      } 

      @Override 
      public void onMarkerDrag(Marker marker) { 
      } 
     }); 

     mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { 
      @Override 
      public void onMapLoaded() { 

       LogUtils.e("TAG", mMap.getCameraPosition().target.toString()); 
       convertLocationToAddress(mMap.getCameraPosition().target); 
       marker = mMap.addMarker(new MarkerOptions() 
         .position(new LatLng(mMap.getCameraPosition().target.latitude, mMap.getCameraPosition().target.longitude)) 
         .title("Marker") 
         .draggable(true) 
         .snippet("Location") 
         .icon(BitmapDescriptorFactory 
           .defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
      } 
     }); 


    } 
} 


@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if (requestCode == 4) { 
     for (int a = 0; a < permissions.length; a++) { 
      if (grantResults[a] != PackageManager.PERMISSION_GRANTED) { 
       continue; 
      } 
      switch (permissions[a]) { 
       case Manifest.permission.ACCESS_FINE_LOCATION: 
        mapFragment.getMapAsync(new OnMapReadyCallback() { 
         @Override 
         public void onMapReady(GoogleMap googleMap) { 
          mMap = googleMap; 
          setUpMap(); 
          buildGoogleApiClient(); 
         } 
        }); 
        break; 
       case Manifest.permission.ACCESS_COARSE_LOCATION: 
        mapFragment.getMapAsync(new OnMapReadyCallback() { 
         @Override 
         public void onMapReady(GoogleMap googleMap) { 
          mMap = googleMap; 
          setUpMap(); 
          buildGoogleApiClient(); 
         } 
        }); 
        break; 

      } 
     } 
    } 
} 

private void convertLocationToAddress(LatLng latLong) { 
    try { 

     Geocoder geocoder; 
     List<android.location.Address> addresses; 
     geocoder = new Geocoder(getActivity(), Locale.getDefault()); 
     addresses = geocoder.getFromLocation(latLong.latitude, latLong.longitude, 1); 

     LogUtils.d("Address", addresses.toString()); 
     /*address.setAddress(addresses.get(0).getAddressLine(0)); 
     if (addresses.get(0).getLocality() != null) { 
      address.setCity(addresses.get(0).getLocality()); 
     } else { 
      address.setCity(""); 
     } 
     if (addresses.get(0).getAdminArea() != null) { 
      address.setState(addresses.get(0).getAdminArea()); 
     } else { 
      address.setState(""); 
     } 
     address.setLatitude(latLong.latitude); 
     address.setLongitude(latLong.longitude); 
     if (addresses.get(0).getPostalCode() != null) { 
      // address.setPinCode(addresses.get(0).getPostalCode()); 
     }*/ 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
private void checkGpsEnabled() { 
    LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 
    boolean gps_enabled = false; 
    boolean network_enabled = false; 
    try { 
     gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     if (!gps_enabled && !network_enabled) { 
      AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 
      dialog.setTitle(getResources().getString(R.string.location_gps_alretDialog_tittle)); 
      dialog.setMessage(getResources().getString(R.string.location_gps_alretDialog_msg)); 
      dialog.setPositiveButton(this.getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
        MixPanelEvents.addMixPanelEvents(getActivity(), getResources().getString(R.string.location_gps_alretDialog_tittle)); 
        Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
        startActivityForResult(myIntent, 1); 
       } 
      }); 
      dialog.setNegativeButton(this.getString(R.string.no), new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
        paramDialogInterface.dismiss(); 
       } 
      }); 
      dialog.show(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
} 
+0

Créez simplement un centre d'icônes fixe dans la mise en page. par programme faire des coordonnées du centre quand on clique sur GPS – Varma460

+0

Quel est exactement l'erreur lorsque vous avez essayé le code ci-dessus – Veerendra

+0

comment fixer le marqueur au centre sur google map. – Dinesh

Répondre

1

Pourquoi ne pas ajouter votre marqueur en vue et la superposer au-dessus de la carte. Votre fichier de mise en page peut ressembler à ceci:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/map_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context="com.example.mapstest.MapsActivity" /> 

    <FrameLayout 
     android:id="@+id/pin_view" 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/pin"/> 

</FrameLayout> 

et définir plus tard cette façon

public void moveCamera(double lat, double lng) { 
    CameraPosition cameraPos = new CameraPosition.Builder() 
      .target(new LatLng(lat, lng)) 
      .zoom(10).bearing(0).tilt(0).build(); 
    mapView.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPos), null); 
} 

ou si vous utilisez un MapFragment ajouter le marqueur à l'activité fragment

vérifier:

android How to move a map under a marker

+0

mais je suis utilisé en xml < fragment android: id = "@ + id/carte" android: name = "com.google.android.gms.maps.SupportMapFragment" android: layout_width = "match_parent" android: layout_height = "match_parent" android: layout_marginTop = "@ dimen/ten_10dp" /> – Dinesh