MapView не отображается правильно - PullRequest
0 голосов
/ 13 февраля 2019

Я использую 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?) {

        }

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

enter image description here

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

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 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));
  }

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

0 голосов
/ 14 февраля 2019

Когда вы установите it.uiSettings.setAllGesturesEnabled(false) и it.uiSettings.isZoomControlsEnabled = false, используйте MapView в Lite Mode :

<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" />
...