Android 谷歌地图不受欢迎地重置相机缩小

Android 谷歌地图不受欢迎地重置相机缩小,android,google-maps,android-studio,Android,Google Maps,Android Studio,我有一个基于谷歌地图的应用程序,允许用户查看标记。我遇到的问题是,当我放大以查看地图上的所有标记时,几秒钟后,地图重置为原始缩放级别,我无法查看所有标记 我希望地图保持在用户缩放级别,但我无法想出逻辑。这是我的代码: @Override protected void onPostExecute(final ArrayList<Item> arrayList) { if(isCancelled()) return; if(googleMap!=null) {

我有一个基于谷歌地图的应用程序,允许用户查看标记。我遇到的问题是,当我放大以查看地图上的所有标记时,几秒钟后,地图重置为原始缩放级别,我无法查看所有标记

我希望地图保持在用户缩放级别,但我无法想出逻辑。这是我的代码:

@Override
protected void onPostExecute(final ArrayList<Item> arrayList) {
    if(isCancelled()) return;
    if(googleMap!=null) {
        googleMap.clear();
        mMarker2Item.clear();
        LatLngBounds.Builder boundBuilder = new LatLngBounds.Builder();
        for (Item item : arrayList) {
            MarkerOptions opts = new MarkerOptions()
                    .position(item.location())
                    .title(item.name);
            if(item.iconBitmap!=null){
                opts = opts.icon(BitmapDescriptorFactory.fromBitmap(item.iconBitmap));
            }
            Marker newMarker = googleMap.addMarker(opts);
            newMarker.setSnippet(item.vicinity);
            mMarker2Item.put(newMarker, item);
            boundBuilder.include(item.location());
        }
        try {
            CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(boundBuilder.build(), 200);
            googleMap.moveCamera(cameraUpdate);
            googleMap.animateCamera(cameraUpdate, 1000, null);
        } catch (Exception ex) {

        }
    } else mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            onPostExecute(arrayList);
        }
    }, 500);
}
@覆盖
PostExecute上受保护的void(最终ArrayList ArrayList){
if(isCancelled())返回;
if(谷歌地图!=null){
googleMap.clear();
mMarker2Item.clear();
LatLngBounds.Builder boundBuilder=新的LatLngBounds.Builder();
用于(项目:arrayList){
MarkerOptions opts=新的MarkerOptions()
.position(item.location())
.标题(项目名称);
if(item.iconBitmap!=null){
opts=opts.icon(BitmapDescriptorFactory.fromBitmap(item.iconBitmap));
}
Marker newMarker=googleMap.addMarker(opts);
新标记。固定接头(项目附近);
mMarker2Item.put(新标记,item);
boundBuilder.include(item.location());
}
试一试{
CameraUpdate CameraUpdate=CameraUpdateFactory.newLatLngBounds(boundBuilder.build(),200);
googleMap.moveCamera(cameraUpdate);
googleMap.animateCamera(cameraUpdate,1000,空);
}捕获(例外情况除外){
}
}else mHandler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
onPostExecute(arrayList);
}
}, 500);
}

只需将布尔标志定义为活动中的类成员变量(前提是您的AsyncTask是活动的子类):

然后,在移动相机之前检查布尔标志:

if (firstTime) {
  firstTime = false;
  CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(boundBuilder.build(), 200);
  googleMap.moveCamera(cameraUpdate);
  googleMap.animateCamera(cameraUpdate, 1000, null);
}

您可以使用标志,并且只能在AsyncTask第一次运行时执行CameraUpdate操作。谢谢@DanielNugent我仍在尝试熟悉整个编码方面和逻辑。你能提供一个代码样本吗?先生,你是个天才!这很好用!谢谢你@丹尼尔努金特
if (firstTime) {
  firstTime = false;
  CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(boundBuilder.build(), 200);
  googleMap.moveCamera(cameraUpdate);
  googleMap.animateCamera(cameraUpdate, 1000, null);
}