1. 程式人生 > >在一個activity中不同的fragment中載入百度地圖時,百度地圖重合疊加覆蓋的解決方案

在一個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切換或滾動閃屏、白邊等問題。