使用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);