关于这个问题有很多问题,但大多数都太专业了,不能回答我的问题.
我有一个GoogleMap我告诉它适合它的相机到某些界限.也许不是很令人惊讶,我收到一个错误:
java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view.
所以让我们把这个问题抽象给任何人View.
这个'布局'事件何时实际发生?onMeasure()例如,未显示在" 活动生命周期"中.何时可以安全地调用我需要布局的方法?
Fra*_*dez 16
正如文档所说,你应该使用它
mapa.moveCamera(CameraUpdateFactory.newLatLngBounds(Builder.build(),
this.getResources().getDisplayMetrics().widthPixels,
this.getResources().getDisplayMetrics().heightPixels,
50));
Run Code Online (Sandbox Code Playgroud)
这是一项活动,相反
mapa.moveCamera(CameraUpdateFactory.newLatLngBounds(Builder.build(),
50));
Run Code Online (Sandbox Code Playgroud)
这适合我.
文档
注意:如果要在地图经过布局后用于移动相机,则仅使用更简单的方法newLatLngBounds(boundary,padding)生成CameraUpdate.在布局期间,API会计算正确投影边界框所需的地图显示边界.相比较而言,可以使用通过在任何时间更复杂的方法newLatLngBounds(边界,宽度,高度,填充)返回的CameraUpdate,甚至在地图已布局发生了,因为API从您传递参数计算显示边界.
要在更新的Maps API中解决此特定问题,您应该使用
map.moveCamera(CameraUpdateFactory.newLatLngBounds(Builder.build(), 50));
Run Code Online (Sandbox Code Playgroud)
ViewTreeObserver.OnGlobalLayoutListener像西蒙的回答一样使用.
您还可以使用View.post()向View消息队列中添加内容,但我不知道布局是否保证在其结尾处发生(有人说它没有,但是即使Groupon + Google也做错了).
对于地图片段:
MapFragment.getView().post(new Runnable(){
run() {
...Use the layout params...
}
}
Run Code Online (Sandbox Code Playgroud)