it-swarm.com.ru

Google Map для Android Моя кнопка пользовательского местоположения

Как мне поменять на карте Google кнопку моего местоположения по умолчанию? Я включил свое местоположение и на карте нарисовал стандартное изображение, чтобы найти местоположение, можно ли изменить изображение по умолчанию?

19
Nininea

Смотрите ниже XML-файл для пользовательской кнопки: 

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

Затем в классе Java объявите кнопку вашего местоположения:

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

Нажмите Событие:

imgMyLocation.setOnClickListener(new OnClickListener() {

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

}

Получить метод определения местоположения, в котором просто передать текущую широту и долготу.

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

Если вы хотите сохранить плавность кнопки «Мое местоположение» по умолчанию, но не внешний вид, вызовите следующие строки:

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

Теперь вы можете запускать и останавливать обновления местоположения, сохраняя поведение по умолчанию

7
Zach

С помощью простого трюка вы можете заменить кнопку «Мое местоположение» на другую. 

  1. Настройте макет вашей новой кнопки. 
  2. Установите мое местоположение включенным в API карты. 
  3. Скрыть кнопку по умолчанию моего местоположения. 
  4. вызов метода нажатия моего местоположения на ваш пользовательский щелчок кнопки.

1. Настройте макет вашей новой кнопки

добавить новую кнопку в нужное место в файле макета активности карты.

<?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. Установите мое местоположение включенным в карты API

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

3. Скрыть кнопку по умолчанию моего местоположения.

    //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. вызвать метод click моего местоположения на ваш пользовательский щелчок кнопки.

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

Это может быть полезно для тех, кто ищет изменение значка местоположения напрямую, вместо того, чтобы использовать какой-либо трюк или обходной путь:

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

locationButton.setImageResource(R.drawable.ic_location_current)`

Здесь findViewById<ImageView> - это то, что нужно сделать.

0
Abhijeet Hallur