之前做高德地图,把地图嵌套在fragment里面。高德其实不推荐说嵌套在fragment里面,
TextureMapView性能是没有MapView好的。
但是项目需要,只能那么做的。其实我framgment切换是没有问题的,但是我有一个SlidingMenu的功能,使用
SlidingMenu就会出现闪屏黑边
地图如果是3d的则会闪屏,但是2d的就不会了。
有人说把getWindow().setFormat(PixelFormat.TRANSLUCENT)加在activity可以解决,但是我试了是没有效果的。
闪屏的原因是因为高德地图绘制的速度大于UI的绘制速度(网上看的,不知道有没有说错)
把MapView替换成TextureMapView正常是可以解决闪屏(但是我的是没有解决,我不知道怎么回事)
检查下fragment是用什么方法切换的。如果是用replace,那就换成hide和show。因为replace会替换fragment,然后重新执行生命周期,地图又会绘制一遍。
正常用hide和show是可以解决的。
我之前是这么写的
final FragmentTransaction tf = getSupportFragmentManager().beginTransaction();
// 实例化Fragment页面 HomeFragment fragment = new HomeFragment(); // 替换当前的页面 fragmentTransaction.replace(R.id.frame_content, fragment); // 事务管理提交 fragmentTransaction.commitAllowingStateLoss();
修改后
if (fragmentSpace != null) { tf.hide(fragmentSpace); } if (fragmentAt != null) { tf.hide(fragmentAt); }if (mHomeFragment == null) { mHomeFragment = new HomeFragment(); tf.add(R.id.frame_content, mHomeFragment); } else { tf.show(mHomeFragment); } tf.commitAllowingStateLoss();如果还是有闪黑边的话,试着在地图控件里面加入
android:layout_marginLeft="-80dp"只是让黑边隐藏,但是不能决定黑边的问题。
也有人说用高德地图的截图功能,然后SlidingMenu开启的时候截屏,利用截屏的功能把黑屏,黑屏遮盖。我试过了,黑屏黑边是可以解决,但是截图的时候还是会闪屏。不知道是不是我的手机问题。
fragment和地图本身就不是很兼容。这些方法要是没有办法解决,去看看地图的sdk是不是最新版,升级最新版一般都是可以解决。我是用了以上的方法,加上地图最新的sdk。解决了闪屏黑屏黑边的问题。