2016-11-24 4 views
2

Ich habe den aktuellen Standort auf der Google-Karte zeigen, aber ich möchte Marker in der Mitte auf der Karte zu beheben, wenn "Auto Place City" ausgewählt und dann wird dieser Ort auf einer Google-Karte angezeigt.Wie man den Marker in der Google Map und in der Karte bewegt?

Mein Code ist unten:

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

Erstellen Sie einfach eine feste Icon-Mitte im Layout. programmatisch machen Koordinaten in der Mitte, wenn Sie auf GPS klicken – Varma460

+0

Was genau ist der Fehler, wenn Sie den obigen Code – Veerendra

+0

, wie man Marker in der Mitte auf Google-Karte behoben. – Dinesh

Antwort

1

Warum nicht Sie Ihre Markierung als Ansicht hinzufügen und es oben auf der Karte überlagern. Ihr Layout-Datei kann wie folgt aussehen:

<?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> 

und stellen Sie später auf diese Weise

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); 
} 

oder , wenn Ihr einen MapFragment fügen Sie die Markierung an das Fragment Aktivität

Prüfung dies mit:

android How to move a map under a marker

+0

aber ich bin in xml < Fragment android: id = "@ + id/map" 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

Verwandte Themen