解决百度地图+slidingmenu 切换黑边 ,切换Fragment闪黑屏,64位手机侧滑地图错位

使用SlidingMenu + Fragment ,百度地图显示在Fragment中,在侧滑过程中会出现错位黑边,特别是64位的机器上,让人感觉自己的应用因为这个原因瞬间low很多,到百度地图官网没有找到答案。

后面看到有这样的解决办法

1.在Fragment中拿到SlidingMenu设置setOnOpenedListener和setOnClosedListener监听,在侧滑栏打开时通过百度地图BaiduMap的snapshot方法截图获取Bitmap对象

2.滑栏打开时将Bitmap设置为ImageView的背景,让ImageView显示,MapView隐藏

3.在侧滑栏关闭时再截图,让ImageView显示,MapView隐藏,侧边栏关闭完毕让ImageView隐藏,MapView显示

经过本人测试,这种方法并不能很好的解决问题,SlidingMenu中的OnOpenedListener和OnClosedListener监听都是在SlidingMenu打开之后的监听,
我研究了一下SlidingMenu的源码,并没有找到SlidingMenu打开和关闭的瞬间的监听,但是发现onPageScrolled这个方法是在侧滑不断会被调用的,然后我就在SlidingMenu的源码里自己写了打开瞬间和关闭瞬间的监听,两个监听的回调都写在onPageScrolled方法里,实现自己写的这两个回调之后,在打开的瞬间和关闭的瞬间对百度地图进行截图,这样问题是完美解决了,但是打开和关闭花的时间非常的长,有点卡顿,百度地图截图需要大把的时间,这样体验并不是很好,后面想到如下方法代替,大致步骤如下:

1.在布局文件中让ImageView显示,MapView隐藏

2.SlidingMenu打开完毕后,让MapView显示,ImageView隐藏,打开的瞬间让MapView隐藏,ImageView显示

3.SlidingMenu关闭完毕后,也让MapView显示,ImageView隐藏,关闭的瞬间让MapView显示,ImageView隐藏


主要代码:

布局文件 fragment_map.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorWhite"
    android:orientation="vertical">
        <com.baidu.mapapi.map.MapView
            android:id="@+id/bmapView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clickable="true"
            android:visibility="gone"/>
        <ImageView
            android:id="@+id/image_temp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/bmap"
            />
</LinearLayout>

临时的图片如下:


Fragment中的主要代码:

slidingMenu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {
    @Override
    public void onOpened() {
        imageTemp.setVisibility(View.GONE);
        mMapView.setVisibility(View.VISIBLE);
        Log.e("399", "打开完毕");
    }
});
slidingMenu.setOnClosedListener(new SlidingMenu.OnClosedListener() {
    @Override
    public void onClosed() {
        imageTemp.setVisibility(View.GONE);
        mMapView.setVisibility(View.VISIBLE);
        isFirstClose = true;
        Log.e("399", "关闭完毕");
    }
});
slidingMenu.setOnCloseListener(new SlidingMenu.OnCloseListener() {
    @Override
    public void onClose() {
        Log.e("399", "开始关闭");
        imageTemp.setVisibility(View.VISIBLE);
        mMapView.setVisibility(View.GONE);
    }
});

打开的瞬间和关闭的瞬间执行下面的逻辑

imageTemp.setVisibility(View.VISIBLE);
mMapView.setVisibility(View.GONE);


你可能感兴趣的:(Fragment,imageview,MapView,SlidingMenu)