IllegalStateException: el tamaño de la vista es demasiado pequeño después del relleno
Estoy desarrollando una aplicación para Android. En esta aplicación, estoy mostrando un MapView en un fragmento. Si mi dispositivo gira y trato de mover la cámara usando uno de los siguientes métodos:
mapa.animateCamera(cameraUpdate);
o
mapa.moveCamera(cameraUpdate);
Entonces mi aplicación se bloquea y muestra el siguiente error:
java.lang.IllegalStateException: View size is too small after padding
at com.google.a.a.ab.b(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.d.dw.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.d.et.a(Unknown Source)
at com.google.android.gms.maps.internal.j.onTransact(SourceFile:83)
at android.os.Binder.transact(Binder.java:380)
at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.moveCamera(Unknown Source)
at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source)
at com.accionplus.dbdplus.utils.MapUtils.centrarCamara(MapUtils.java:88)
at com.accionplus.dbdplus.utils.MapUtils.centrarCamara(MapUtils.java:52)
at com.accionplus.dbdplus.controladores.pdv.RutaProgramadaFragment$4.onMyLocationButtonClick(RutaProgramadaFragment.java:274)
at com.google.android.gms.maps.GoogleMap$3.onMyLocationButtonClick(Unknown Source)
at com.google.android.gms.maps.internal.zzo$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:380)
at com.google.android.gms.maps.internal.be.a(SourceFile:81)
at com.google.maps.api.android.lib6.d.ak.onClick(Unknown Source)
at android.view.View.performClick(View.java:5156)
at android.view.View$PerformClick.run(View.java:20755)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Lo busqué en Google pero sin éxito. Acabo de descubrir que se trataba de un problema reportado para Google, pero no sé si hay alguna solución para "resolver" este problema. ¿Alguien puede ayudarme?
EDITAR: Estoy agregando más código
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.accionplus.dbdplus.controladores.pdv.RutaProgramadaActivity">
<LinearLayout
android:id="@+id/card_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#15000000"
android:orientation="vertical"/>
<LinearLayout
android:id="@+id/filtro_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/card_container"
android:layout_margin="10dp"
android:gravity="left|top"
android:orientation="horizontal"
android:weightSum="1">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.7"
android:gravity="left|top"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:orientation="horizontal"
android:weightSum="1">
<ImageButton
android:id="@+id/seleccionar_fecha_btn"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:background="@drawable/button"
android:src="@drawable/ic_date"
android:text="@string/buscar"
android:textColor="@color/color_text_primary"/>
<TextView
android:id="@+id/fecha_consulta_tv"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:background="@drawable/rectangle"
android:gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/rectangle">
<Spinner
android:id="@+id/tipo_ruta_sp"
android:layout_width="fill_parent"
android:layout_height="35dp"
android:layout_gravity="center"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<com.google.android.gms.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/filtro_ll"/>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:foregroundGravity="center|top"
android:visibility="gone"/>
</RelativeLayout>
Aquí es cuandoMyLocationButton
se hace clic:
mMap.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener() {
@Override
public boolean onMyLocationButtonClick() {
MapUtils.centrarCamara(getActivity(), mMap, mPuntosFinales);
return true;
}
});
Aqui estaMapUtils.centrarCamara()
método:
public static void centrarCamara(Context contexto, GoogleMap mapa, LatLng... posiciones) {
centrarCamara(contexto, mapa, Boolean.TRUE, posiciones);
}
public static void centrarCamara(Context contexto, GoogleMap mapa, boolean animado,
LatLng... posiciones) {
if (mapa == null) {
return;
}
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (LatLng posicion : posiciones) {
builder.include(posicion);
}
LatLngBounds bounds = builder.build();
CameraUpdate cu = CameraUpdateFactory
.newLatLngBounds(bounds, ViewUtils.dpAPixeles(MARKERS_DP_OFFSET, contexto));
if (animado) {
mapa.animateCamera(cu);
} else {
mapa.moveCamera(cu);
}
}
ViewUtils.dpAPixeles:
public static int dpAPixeles(int dp, Context contexto) {
Resources r = contexto.getResources();
int px = (int) TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics());
return px;
}
La excepción ocurre cuandomapa.moveCamera()
omapa.animateCamera()
son llamados;