【问题标题】:Android GoogleMap v2 doesn't pan/zoom on swipe/pinchAndroid GoogleMap v2 不会在滑动/捏合时平移/缩放
【发布时间】:2013-10-31 05:05:42
【问题描述】:

我在 FrameLayout 中有一个地图 v2。如果我不通过代码对其进行动画处理,它会以通常的方式响应触摸/滑动/捏合事件。如果我在 onLocationChanged() 调用后对其进行动画处理,则相机会移动并缩放,但随后地图会停止响应用户输入(或者至少是那种感觉)。您滑动但地图不平移。你捏,但地图没有缩放。你点击……你明白了。

但是,我偶然发现确实发生了某些事情,但由于某种原因没有显示出来。例如,如果我滑动,地图不会移动,但会以某种方式记录滑动。如果我触摸主页按钮,将系统带回主屏幕,然后再次将应用程序置于前台,我可以看到我的地图处于平移位置,缩放可能最远,没有我之前最终添加的任何标记。滑动手势似乎被以 lat=0, lng=0 为中心的覆盖不可见地图捕获并应用于该地图,现在似乎显示的是该地图。

除了使用各种断点之外,很明显我的活动中没有创建任何其他地图,更不用说透明和重叠的地图了......我的描述只是为了让你了解发生了什么,我是并不是说我上面还有另一张地图。

以下是相关代码,如果您需要更多,请询问:

我的 onCreate()

@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);

  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
      WindowManager.LayoutParams.FLAG_FULLSCREEN);

  setContentView(R.layout.map_activity);

}

我的 onStart() 是:

@Override
protected void onStart()
{
  super.onStart();

  // Create the LocationRequest object
  mLocationRequest = LocationRequest.create();
  // Use high accuracy
  mLocationRequest.setPriority(
        LocationRequest.PRIORITY_HIGH_ACCURACY);
  // Set the update interval to 5 seconds
  mLocationRequest.setInterval(UPDATE_INTERVAL);
  // Set the fastest update interval to 1 second
  mLocationRequest.setFastestInterval(FASTEST_INTERVAL);

   mLocationClient = new LocationClient(this, this, this);
   mLocationClient.connect();
}

@Override
public void onConnected(Bundle arg0)
{
  mLocationClient.requestLocationUpdates(mLocationRequest, this);  
}

我的 onLocationChanged() 是

@Override
public void onLocationChanged(Location loc)
{
  if (mMap == null)
  {
    mapFragment = SupportMapFragment.newInstance();
    FragmentTransaction fragmentTransaction = getSupportFragmentManager()
        .beginTransaction();
    fragmentTransaction.add(R.id.mapcontainer, mapFragment);
    fragmentTransaction.commit();

    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

    mMap.getUiSettings().setAllGesturesEnabled(true);
    mMap.getUiSettings().setMyLocationButtonEnabled(true);
    mMap.getUiSettings().setZoomControlsEnabled(true);
    mMap.getUiSettings().setCompassEnabled(true);
    mMap.setMyLocationEnabled(false);

    LatLng location = new LatLng(loc.getLatitude(), loc.getLongitude());
    CameraPosition pos = new CameraPosition.Builder().target(location).zoom(12).build();
    CameraUpdate cu = CameraUpdateFactory.newCameraPosition(pos);
    mMap.animateCamera(cu);

    if (mLocationClient.isConnected())
      mLocationClient.removeLocationUpdates(this);
    mLocationClient.disconnect();

    Log.e(getClass().getSimpleName(), "lat = " + location.latitude + " long = " + location.longitude);
  }
}

请注意,我将地图配置推迟到第一个 onLocationChanged() 事件,因为否则地图拒绝动画到请求的位置(请参阅我的另一个问题:Android: GoogleMap v2 ignores animate/move calls)。

【问题讨论】:

  • map_activity.xml的内容是什么?

标签: android swipe google-maps-api-2 pinchzoom


【解决方案1】:

您似乎在布局中添加了两个SupportMapFragments。用户看到的不是他们与之交互的那个。确保只添加一个片段。

【讨论】:

  • 你的意思是 mapFragment = SupportMapFragment.newInstance() 被执行了两次?如果是这样,我确定不是这样,在此处放置一个断点它只会停止一次。
  • 你才是男人!!!确定我只执行了一次 mapFragment = SupportMapFragment.newInstance() ,但那一次太频繁了!我已经在 xml 中声明了片段...
  • @LucioCrusca 这就是我要求 map_activity 布局的原因。我想我已经知道了。
猜你喜欢
  • 2012-07-25
  • 2013-01-17
  • 2023-03-27
  • 2013-12-12
  • 1970-01-01
  • 2015-11-04
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多