¿Cómo agregar un marcador personalizado a Google Maps en Android?

Google Maps se usa en muchas aplicaciones para mostrar una ubicación e indicar una ubicación específica en un mapa. Hemos visto el uso de mapas en muchas aplicaciones que brindan servicios como Ola, Uber y muchas más. En estas aplicaciones, podrá ver cómo podemos agregar un marcador personalizado a Google Maps en Android. 

¿Qué vamos a construir en este artículo? 

Construiremos una aplicación simple en la que mostraremos un mapa y, en ese mapa, mostraremos un marcador personalizado en nuestra aplicación. A continuación se muestra la captura de pantalla en la que veremos lo que vamos a hacer en este proyecto.

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación. Asegúrese de seleccionar Actividad de mapas al crear un nuevo proyecto.

Paso 2: generar una clave API para usar Google Maps

Para generar la clave API para Maps, puede consultar Cómo generar la clave API para usar Google Maps en Android . Después de generar su clave API para Google Maps. Tenemos que añadir esta clave a nuestro Proyecto. Para agregar esta clave en nuestra aplicación, navegue a la carpeta de valores> archivo google_maps_api.xml y en la línea 23 debe agregar su clave API en lugar de YOUR_API_KEY . Después de agregar esto, ahora estamos listos para agregar el marcador personalizado a nuestra aplicación. Después de agregar la clave API, puede ejecutar su aplicación y podrá ver un marcador predeterminado en la ubicación de Sydney con el marcador predeterminado. 

Paso 3: Agregar un marcador personalizado en Google Maps

Para agregar un marcador personalizado a Google Maps, navegue a la aplicación> res> dibujable> Haga clic con el botón derecho en él> Nuevo> Activos vectoriales y seleccione el ícono que tenemos que mostrar en su Mapa. Puede cambiar el color según nuestros requisitos. Después de crear este ícono, avanzaremos hacia la adición de este marcador a nuestro Mapa. 

Paso 4: trabajar con el archivo MapsActivity.java

MapsActivity.java MapsActivity.java

Java

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
  
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
  
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
  
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
  
    private GoogleMap mMap;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified
        // when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
  
    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
  
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")
                // below line is use to add custom marker on our map.
                .icon(BitmapFromVector(getApplicationContext(), R.drawable.ic_flag)));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
  
    private BitmapDescriptor BitmapFromVector(Context context, int vectorResId) {
        // below line is use to generate a drawable. 
        Drawable vectorDrawable = ContextCompat.getDrawable(context, vectorResId);
          
        // below line is use to set bounds to our vector drawable. 
        vectorDrawable.setBounds(0, 0, vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight());
          
        // below line is use to create a bitmap for our
        // drawable which we have added.
        Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
          
        // below line is use to add bitmap in our canvas. 
        Canvas canvas = new Canvas(bitmap);
          
        // below line is use to draw our 
        // vector drawable in canvas. 
        vectorDrawable.draw(canvas);
          
        // after generating our bitmap we are returning our bitmap. 
        return BitmapDescriptorFactory.fromBitmap(bitmap);
    }
}

Ahora ejecute su aplicación y vea el resultado de la aplicación. 

Producción:

Nota: En Google Developer Console ( https://console.developers.google.com ), asegúrese de que la » API de Android de Google Maps v2 » esté habilitada. Y también asegúrese de que su clave API exista.

Add Custom Marker to Google Maps in Android Output

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *