API di Android Maps v2 Cambia icona MyLocation

Vorrei sostituire l'icona predefinita che Android Maps V2 usa per "My Location" (Il piccolo punto blu / freccia) con la mia image. Ho creato il mio provider piastrelle che contiene alcune mappe prevalentemente azzurre e, di conseguenza, l'icona predefinita My Location è molto difficile da vedere. In precedenza avrei appena superato il metodo di MyLocationOverlay del MyLocationOverlay , ma non sembra essere uno nella nuova API. Qualsiasi aiuto sarebbe grande!

EDIT: ho anche bisogno dell'icona per poter ruotare, allo stesso modo in cui la freccia dipende dal modo in cui si sta affrontando. Quindi non posso usare solo un marker normale: (In pratica ho solo bisogno di creare un'image personalizzata per quella freccia ..

  • Errore durante l'esecuzione di un'app: L'esecuzione immediata richiede "Strumenti" Android | Abilitare l'integrazione ADB '.
  • facebook unity sdk 6.0 crash app al secondo login
  • Come posso specificare la width e l'altezza delle celle Android GridLayout in misure relative?
  • Come progettare un stream in cui uno degli schermi è uno schermo di accesso?
  • Gli elementi JSoup rimuovono automaticamente i duplicati
  • Reinstallazione dell'interface utente con candidatura visualizzata nella tastiera personalizzata
  • immettere qui la descrizione dell'immagine

    Aggiorna Hi All, l'aggiornamento a Google Play consente ora marcatori piatti e rotazione del marcatore che è esattamente quello di cui avevo bisogno.

  • Video in streaming da Android
  • come memorizzare l'object JSON nel database SQLite
  • perché MenuItemCompat.getActionProvider restituisce null?
  • Phonegap - cordova è lento e lento su dispositivi android e iOS
  • Utilizzando useStats.getTotalTimeInForeground () per get il tempo di each applicazione in un dispositivo speso in primo piano
  • RxJava task di Async in Android
  • 7 Solutions collect form web for “API di Android Maps v2 Cambia icona MyLocation”

    la mia semplice soluzione è solo distriggersre la "mia ubicazione" della mappa di Google

    e crea ImageView in mappa con la mia icona e cattura ImageView con

    onClick e getMyLocation, animateCamera in onClick

      this.mGoogleMap.getUiSettings().setMyLocationButtonEnabled(false); this.mGoogleMap.setMyLocationEnabled(true); 

    .

     @Override public void onClick(final View v) { Location location = this.mGoogleMap.getMyLocation(); if (location != null) { LatLng target = new LatLng(location.getLatitude(), location.getLongitude()); CameraPosition position = this.mGoogleMap.getCameraPosition(); Builder builder = new CameraPosition.Builder(); builder.zoom(15); builder.target(target); this.mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(builder.build())); } } 

    L'ultimo aggiornamento a Google Play Services consente ora di utilizzare i markers 'Flat' e ruotarli che è esattamente quello di cui avevo bisogno. Ecco una semplice versione del modo in cui l'ho implementata. Probabilmente c'è un bel po 'che posso fare per ottimizzare e modificare l'animation, ma fa il lavoro per il momento. Eventuali risposte sono benvenute.

     Marker mPositionMarker; GoogleMap mMap; @Override public void onLocationChanged(Location location) { if (location == null) return; if (mPositionMarker == null) { mPositionMarker = mMap.addMarker(new MarkerOptions() .flat(true) .icon(BitmapDescriptorFactory .fromResource(R.drawable.positionIndicator)) .anchor(0.5f, 0.5f) .position( new LatLng(location.getLatitude(), location .getLongitude()))); } animateMarker(mPositionMarker, location); // Helper method for smooth // animation mMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(location .getLatitude(), location.getLongitude()))); } public void animateMarker(final Marker marker, final Location location) { final Handler handler = new Handler(); final long start = SystemClock.uptimeMillis(); final LatLng startLatLng = marker.getPosition(); final double startRotation = marker.getRotation(); final long duration = 500; final Interpolator interpolator = new LinearInterpolator(); handler.post(new Runnable() { @Override public void run() { long elapsed = SystemClock.uptimeMillis() - start; float t = interpolator.getInterpolation((float) elapsed / duration); double lng = t * location.getLongitude() + (1 - t) * startLatLng.longitude; double lat = t * location.getLatitude() + (1 - t) * startLatLng.latitude; float rotation = (float) (t * location.getBearing() + (1 - t) * startRotation); marker.setPosition(new LatLng(lat, lng)); marker.setRotation(rotation); if (t < 1.0) { // Post again 16ms later. handler.postDelayed(this, 16); } } }); } 

    Dal 3.1.36 non puoi cambiare l'icona (credo che cambierà in futuro, ma guardando alla velocità dell'implementazione dei miglioramenti API v2, non sarà prima di Natale).

    È comunque ansible utilizzare un marcatore, perché ha funzionalità setIcon .

    Fondamentalmente devi dimenticare di GoogleMap.setMyLocationEnabled , perché apparirà sempre sopra. In alternativa, creerai il tuo LocationClient e usa lat, lunga e portnte da Location per aggiornare il Marker . Inoltre aggiungere un Circle e utilizzare la precisione per avere un effetto simile alla visualizzazione predefinita di myLocation.

    Non puoi gestire l'evento di clic del button MyLocation sulla mappa di Google, ma c'è un trucco in cui puoi get il comportmento secondo il tuo bisogno:
    prima nel file layout.xml aggiungere la mappa e il button dito MyLocation.
    Puoi raggiungere questo objective con l'aiuto di Layout Relativo:

     <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/myLocationButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:background="@drawable/mylocation" /> </RelativeLayout> 

    È ansible prendere "mylocation.png" sembra u vedere sulla mappa di Google.
    LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

      Criteria criteria = new Criteria(); String s = locationManager.getBestProvider(criteria, false); Location location = locationManager.getLastKnownLocation(s); 

    Fare clic su evento di click del tuo button MyLocation fittizio, in cui aggiungerai l'indicatore
    private GoogleMap googleMap; googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); googleMap.addMarker(new MarkerOptions().icon(YOUR_MODIFIED_ICON).position(latLng).title(TITLE).snippet(SNIPET));
    In questo modo puoi modificare l'icona predefinita della mappa di Google.
    Sì devi anche impostare il livello dello zoom:
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

    prova questo; Io uso questo per disegnare un path sulla mappa, ma ho impostato le icone per i marcatori e per la mia posizione Dichiara questo per visualizzare la tua posizione:

      LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String provider = locationManager.getBestProvider(criteria, true); Location myLocation= locationManager.getLastKnownLocation(provider); longitude = myLocation.getLongitude(); latitude = myLocation.getLatitude(); fromPosition = new LatLng(latitude, longitude); 

    E crea una function simile, ho usato per disegnare sulla mappa ma ho impostato le icone sui marcatori e sulla mia posizione:

     mGoogleMap.clear(); if(response.equalsIgnoreCase("Success")) { ArrayList<LatLng> directionPoint = v2GetRouteDirection.getDirection(document); PolylineOptions rectLine = new PolylineOptions().width(7).color(Color.BLUE); for (int i = 0; i < directionPoint.size(); i++) { rectLine.add(directionPoint.get(i)); } // Adding route on the map mGoogleMap.setOnMarkerClickListener(MainActivity.this); mGoogleMap.addPolyline(rectLine); markerOptions.position(fromPosition); markerOptions.draggable(true); Marker1 = mGoogleMap.addMarker(new MarkerOptions() .position(Estadio) .title("Estadio Cuscatlan") .snippet("Estadio Cuscatlan") .icon(BitmapDescriptorFactory .fromResource(R.drawable.mapmarker))); Marker2 = mGoogleMap.addMarker(new MarkerOptions() .position(Metrocentro) .title("Metrocentro") .snippet("Metrosuelo") .icon(BitmapDescriptorFactory .fromResource(R.drawable.mapmark Marker3 = mGoogleMap.addMarker(new MarkerOptions() .position(Mejicanos) .title("Mejicanos") .snippet("Mejicanos") .icon(BitmapDescriptorFactory .fromResource(R.drawable.mapmarker))); MarkerMe = mGoogleMap.addMarker(new MarkerOptions() .position(fromPosition) .icon(BitmapDescriptorFactory .fromResource(R.drawable.car64))); } Dialog.dismiss(); } } 

    Ecco il codice per accedere al button posizione:

     View mv=findViewById(R.id.map); View locationButton = ((View) mv.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams(); // position on right bottom rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0); rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); rlp.setMargins(0, 180, 180, 0); 

    Puoi modificare l'icona della tua posizione corrente:

     mMap.addMarker(new MarkerOptions().position(new LatLng(location.getLatitude(), location.getLongitude())) .title("Current Location") .snippet(address) .icon(BitmapDescriptorFactory.fromResource(R.drawable.your_image))); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.