web-dev-qa-db-de.com

Google-Karte für Android Meine benutzerdefinierte Schaltfläche

Wie kann ich die Google Maps-Standardschaltfläche für meinen Standort ändern? Ich setze meine Standortaktivierung und zeichne ein Standardbild, um den Standort zu ermitteln. Kann das Standardbild geändert werden?

19
Nininea

Siehe untenstehende XML-Datei auf benutzerdefinierte Schaltfläche: 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <fragment
        Android:id="@+id/maps"
        Android:name="pl.mg6.Android.maps.extensions.SupportMapFragment"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" />

    <LinearLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="10dp"
        Android:layout_marginRight="10dp"
        Android:layout_marginTop="5dp" >

        <ImageView
            Android:id="@+id/imgMyLocation"
            Android:layout_width="40dp"
            Android:layout_height="40dp"
            Android:scaleType="fitXY"
            Android:src="@drawable/track_my_location" />
    </LinearLayout>

</RelativeLayout>

Dann deklarieren Sie in der Java-Klasse Ihren Standort-Button:

private ImageView imgMyLocation;
        imgMyLocation = (ImageView) findViewById(R.id.imgMyLocation);

Klicken Sie auf Ereignis:

imgMyLocation.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                getMyLocation();

}

Holen Sie sich die Standortmethode, indem Sie einfach Ihre aktuellen Breiten- und Längengrade übergeben.

private void getMyLocation() {
        LatLng latLng = new LatLng(Double.parseDouble(getLatitude()), Double.parseDouble(getLongitude()));
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 18);
        googleMap.animateCamera(cameraUpdate);
    }
    });
29
Pratik Dasa

Wenn Sie die Glattheit der Standardschaltfläche "Mein Standort" beibehalten möchten, aber nicht das Aussehen, rufen Sie die folgenden Zeilen an:

//Make sure you have explicit permission/catch SecurityException
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(false);

Jetzt können Sie Standortaktualisierungen starten und stoppen, während Sie das Standardverhalten beibehalten

7
Zach

Mit einem einfachen Trick können Sie die Schaltfläche Mein Standort durch einen benutzerdefinierten ersetzen. 

  1. Passen Sie das Layout Ihrer neuen Schaltfläche an. 
  2. Festlegen, dass mein Standort in Maps API aktiviert ist 
  3. Standardschaltfläche meines Standorts ausblenden 
  4. rufen Sie die Klickmethode meines Standorts auf Ihrem benutzerdefinierten Klicken auf.

1. Passen Sie das Layout Ihrer neuen Schaltfläche an

fügen Sie an der gewünschten Stelle in der Layoutdatei der Kartenaktivität eine neue Schaltfläche hinzu.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
     xmlns:map="http://schemas.Android.com/apk/res-auto"
     xmlns:app="http://schemas.Android.com/apk/res-auto"
     xmlns:tools="http://schemas.Android.com/tools"
     Android:layout_height="match_parent"
     Android:layout_width="match_parent">

    <fragment
         Android:id="@+id/map"
         Android:name="com.google.Android.gms.maps.SupportMapFragment"
         Android:layout_width="match_parent"
         Android:layout_height="match_parent"
         tools:context=".activities.MapsActivity" />

   <ImageView
        Android:id="@+id/ic_location"
        Android:layout_width="18dp"
        Android:layout_height="18dp"
        Android:src="@drawable/ic_location"
        Android:layout_marginRight="8dp"
        Android:layout_marginBottom="18dp"
        Android:layout_alignParentRight="true"
        Android:layout_alignParentBottom="true"/>
</RelativeLayout>

2. Setze meinen Standort in Maps api aktiviert

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    // Enable My Location
    mMap.setMyLocationEnabled(true);
    /* and DON'T disable the default location button*/
 }

3. Standardschaltfläche meines Standortes ausblenden.

    //Create field for map button.
    private View locationButton;

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setMyLocationEnabled(true);

        // get your maps fragment
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
        // Extract My Location View from maps fragment 
        locationButton = mapFragment.getView().findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2"));
        // Change the visibility of my location button
        if(locationButton != null)
            locationButton.setVisibility(View.GONE);
    }

4. Aufrufmethode meines Standorts auf Ihrem benutzerdefinierten Button klicken.

findViewById(R.id.ic_location).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mMap != null)
            {
                if(locationButton != null)
                    locationButton.callOnClick();

            }
         }
    });
4
Ali009

Dies kann für jemanden nützlich sein, der das Standort-Symbol direkt ändern möchte, anstatt einen Trick oder eine Problemumgehung zu verwenden:

locationButton = (mapView.findViewById<View>(Integer.parseInt("1")).parent as View)
    .findViewById<ImageView>(Integer.parseInt("2"))

locationButton.setImageResource(R.drawable.ic_location_current)`

Hier ist findViewById<ImageView> das Richtige.

0
Abhijeet Hallur