mapa.animateCamera(的CameraUpdate);
要么
mapa.moveCamera(的CameraUpdate);
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)
我用Google搜索但没有成功.我刚刚发现它是谷歌报道的问题,但我不知道是否有任何解决方法来“解决”这个问题.任何人都可以帮助我吗?
<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>
这是单击MyLocationButton的时间:
mMap.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener() { @Override public boolean onMyLocationButtonClick() { MapUtils.centrarCamara(getActivity(),mMap,mPuntosFinales); return true; } });
这是MapUtils.centrarCamara()方法:
public static void centrarCamara(Context contexto,GoogleMap mapa,LatLng... posiciones) { centrarCamara(contexto,mapa,Boolean.TRUE,posiciones); } public static void centrarCamara(Context contexto,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; }
调用mapa.moveCamera()或mapa.animateCamera()时发生异常;
解决方法
Do not change the camera with this camera update until the map has
undergone layout (in order for this method to correctly determine the
appropriate bounding Box and zoom level,the map must have a size).
Otherwise an IllegalStateException will be thrown. It is NOT
sufficient for the map to be available (i.e. getMap() returns a
non-null object); the view containing the map must have also undergone
layout such that its dimensions have been determined. If you cannot be
sure that this has occured,use newLatLngBounds(LatLngBounds,int,
int,int) instead and provide the dimensions of the map manually.
因此,当您调用mapa.animateCamera(cameraUpdate)或mapa.moveCamera(cameraUpdate)时,您的问题可能是地图没有大小.
无论如何,正如你所说旋转你的设备时抛出异常,我会说真正的问题是你在调用newLatLngBounds(ViewUtils.dpAPixeles(MARKERS_DP_OFFSET,contexto))时使用的填充引起了问题(也许填充大于View的高度/ 2?).有一个与Google地图相关的注册问题(4773)可以帮助您解决问题.如上所述,一种可能的解决方法是根据方向设置cameraUpdate:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { cu = CameraUpdateFactory.newLatLngBounds(bounds,contexto)); } else { // Use another method to get your camera update,for example CameraUpdateFactory.newLatLng(latLng); }