在一個activity中不同的fragment中載入百度地圖時,百度地圖重合疊加覆蓋的解決方案
1.首先引用百度論壇上的一個例子,地址為:
2.問題主要表現在
2.1 tabOneFragment中有百度地圖,tab2中也有百度地圖,切均為全屏顯示,為了儲存在fragment切換過程中,記錄儲存當前fragment的狀態和一些控制元件的值,採用了 hide和show的載入方式來切換fragment,這裡replace的方法來切換fragment達不到預期的效果。
2.2剛開始載入第一頁的fragemnt時,地圖可以正常載入顯示,切換到第二個fragment中時,地圖區域的部分沒有顯示,被第一個fragemnt的百度地圖遮擋住。查閱了各個方法都不能有效的解決這個問題。
2.2.1 onHiddenChanged是fragemnt顯示和隱藏時一定會呼叫的方法,這裡用setVisibility的方法,此方法不能夠解決問題
/**
* fragment顯示或者隱藏時呼叫的方法
*/
@Override
public void onHiddenChanged(boolean hidden) {//本頁面是否被隱藏,重新切換回來之後為false
super.onHiddenChanged(hidden);
//此處可以進行重新整理資料的處理
if(hidden==true){
mMapView.setVisibility(View.GONE);
}else{
mMapView.setVisibility(View.VISIBLE);
}
}
2.2.2 在 Mainactivity中重寫onAttachment的方法也不能解決問題。
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
if (firstFragment == null && fragment instanceof TabOneFragment) {
firstFragment = (TabOneFragment)fragment;
}else if (secondFragment == null && fragment instanceof TabTwoFragment){
secondFragment = (TabTwoFragment)fragment;
}else if (thirdFragment == null && fragment instanceof TabThreeFragment) {
thirdFragment = (TabThreeFragment)fragment;
}else if (fourFragment == null && fragment instanceof TabFourFragment){
fourFragment=(TabFourFragment)fragment;
}
}
2.2.3 用replace的方法切換fragment可以解決地圖重疊的問題,不過地圖會重新載入,執行生命週期,會出現問題1:螢幕閃黑一下再將地圖加載出來 問題2:不能儲存之前進行過的一些地圖上的操作。
3原因
這個壓蓋問題,是系統GLSurfaceView本身的問題,用兩個GLSurfaceView實驗也是這樣,我這裡載入兩個地圖容器一個是百度地圖,一個是arcgis的地圖……
4解決方案:
百度地圖新增了TextureMapView可以解決,這是android4.0以上給的解決方案,最好的話開啟硬體加速的許可權,否則使用者切換過快的話,可能會出現一些問題。
引用
<com.baidu.mapapi.map.TextureMapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/tab1_include"
android:clickable="true" />
5更好的解決方案暫時還沒有
6.同樣TexturMapView的使用情況還有如下,也能解決一些其他問題:
TextureMapView也解決了MapView基於系統GLSurfaceView導致tabhost切換或滾動閃屏、白邊等問題。