MapView отображается неправильно

Я использую MapView внутри RecycleView в Android.

вот мой xml код:

<com.google.android.gms.maps.MapView
                android:id="@+id/map_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"> 

а также:

private fun initializeMap() {

            val mapView : MapView = binding.root.findViewById(R.id.map_view)
            mapView?.let {
                mapView.onCreate(null)
                mapView.getMapAsync(this)
            }
        }

override fun onMapReady(map: GoogleMap?) {
            MapsInitializer.initialize(fragment.context)
            googleMap = map
            googleMap?.let {

                it.setOnMapLoadedCallback { this }
                it.setOnMapClickListener { this }
                it.uiSettings.setAllGesturesEnabled(false)
                it.uiSettings.isZoomControlsEnabled = false
            }
        }

        override fun onMapLoaded() {

        }


        override fun onMapClick(p0: LatLng?) {

        }

карта, которая появляется, выглядит следующим образом

введите здесь описание изображения

и это занимает много времени, тп появляется, а также не появляется директ, я много прокручиваю

также методы onMapLoaded() и onMapClick() не вызывают


person Amira Elsayed Ismail    schedule 13.02.2019    source источник
comment
Почему вы хотите использовать карту внутри recyclerview? это плохая идея   -  person Manohar    schedule 13.02.2019
comment
это бизнес-требование, есть большой экран с таким количеством элементов, поэтому мы используем представление повторного использования с быстрым адаптером для его реализации, одним из элементов является карта, я пробовал использовать фрагмент карты, и это работало, но повторное использование было используется внутри фрагмента, и вложенные фрагменты также не рекомендуются   -  person Amira Elsayed Ismail    schedule 13.02.2019
comment
Если вы просто хотите показать стационарное изображение места, вы можете получить статическое изображение определенной области, используя LatLng . См. staticmapmaker.com/google.   -  person Manohar    schedule 13.02.2019
comment
Это похоже на хорошую идею, я попробую и отвечу вам, спасибо   -  person Amira Elsayed Ismail    schedule 13.02.2019
comment
Вы также можете получить с помощью широты и логарифта. см. codexworld.com/google-maps-image- использование-google-static-maps-api   -  person Manohar    schedule 13.02.2019
comment
@ManoharReddy это очень хорошее решение, но мне нужно нарисовать круг вокруг широты и долготы пользователя, можете ли вы помочь в этом   -  person Amira Elsayed Ismail    schedule 13.02.2019
comment
Почему бы просто не добавить еще одно изображение с кругом поверх карты?   -  person Manohar    schedule 14.02.2019
comment
@ManoharReddy Я уже сделал это, но подумал, что это обходной путь.   -  person Amira Elsayed Ismail    schedule 14.02.2019


Ответы (2)


При установке it.uiSettings.setAllGesturesEnabled(false) и it.uiSettings.isZoomControlsEnabled = false используйте MapView в упрощенном режиме:

<com.google.android.gms.maps.MapView
                android:id="@+id/map_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                map:cameraZoom="<ZOOM>"
                map:mapType="normal"
                map:liteMode="true"> 

Здесь вы можете найти официальный пример использования MapView внутри RecyclerView и здесь MapView настройки макета:

<!-- MapView in lite mode. Note that it needs to be initialised
     programmatically before it can be used. -->
<com.google.android.gms.maps.MapView
    android:id="@+id/lite_listrow_map"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    map:liteMode="true" map:mapType="none" />
person Andrii Omelchenko    schedule 14.02.2019

это мой файл map.xml

 <com.google.android.gms.maps.MapView android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" />

И это класс Java

public class map extends Fragment implements OnMapReadyCallback {
GoogleMap mMap;
private MapView mapView;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.map,null);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
  @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
 LatLng ahmedabad = new LatLng(23.022505, 72.571365);
        BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.icons8fiat50060);

    MarkerOptions markerOptions = new MarkerOptions().position(ahmedabad)
            .title("Current Location")
            .snippet("Thinking of finding some thing...")
            .icon(icon);

     googleMap.addMarker(markerOptions);
    mMap.getUiSettings().setZoomControlsEnabled(true);
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ahmedabad,30f));
  }

} это довольно просто, я думаю, это будет полезно для вас.

person frankenstein    schedule 14.02.2019