2013-10-30 118 views
0

我有一個地圖v2在FrameLayout。如果我不用代碼對它進行動畫處理,它會以通常的方式響應觸摸/輕掃/捏動事件。如果在onLocationChanged()調用之後爲其設置動畫,攝像機會移動並縮放,但地圖會停止響應用戶輸入(或者至少是這種感覺)。你滑動但地圖不平移。你捏,但地圖不縮放。你點擊...你明白了。Android谷歌地圖v2不能平移/縮放滑動/捏

但是我偶然發現有些事情正在發生,但由於某種原因沒有顯示。例如,如果我滑動,地圖不會移動,但會以某種方式記錄滑動。如果我觸摸主頁按鈕,將系統帶回主屏幕,然後再次將應用程序放在前臺,我可以看到我的地圖處於平移位置,可以進行最遠的縮放,沒有任何我最終添加的標記。似乎滑動手勢被以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)。

+0

'map_activity.xml'的內容是什麼? –

回答

1

您似乎將兩個SupportMapFragment s添加到您的佈局。一個用戶看到的不是他們互動的人。確保只添加一個片段。

+0

你的意思是mapFragment = SupportMapFragment.newInstance()被執行兩次嗎?如果是這樣,我肯定不是這樣,把一個斷點放在那裏只停一次。 –

+0

你是男人!當然,我只執行過一次mapFragment = SupportMapFragment.newInstance(),但那次太頻繁了!我已經有在XML中聲明的片段... –

+0

@LucioCrusca這就是爲什麼我要求map_activity佈局。我想我已經知道了。 –