关于SurfaceView与高德地图互相穿透的解决方案

最近项项目中有需求将地图和相机都放在主页面,这个也就是放在同一个framelayout中,这个东西看似很简单的需求,却让我头疼了2天。因为发现高德地图会和相机的预览画面互相穿透(PS:因为我们APP需要在国外上架使用了2套地图很神奇的是谷歌地图没任何问题),根本无法解决此问题。后来去查了高德地图的解决方案
关于SurfaceView与高德地图互相穿透的解决方案
文章图片
关于SurfaceView与高德地图互相穿透的解决方案
文章图片


好了,看到了解决方案了很开心,然后高高兴兴去改了。符截图
关于SurfaceView与高德地图互相穿透的解决方案
文章图片
关于SurfaceView与高德地图互相穿透的解决方案
文章图片
关于SurfaceView与高德地图互相穿透的解决方案
文章图片


也不知道是不是我用的姿势不对,发现并没什么luan用,怎么办呢?毕竟问题要解决是吧,首先从framelayout入手framelayout是将布局层叠在一块,会相互穿透会不会就是因为这个重叠的原因呢,既然和hidefragment无法解决,是不是可以通过visible解决呢。
那什么时候显示什么时候隐藏呢。
【关于SurfaceView与高德地图互相穿透的解决方案】我的做法是这样的
关于SurfaceView与高德地图互相穿透的解决方案
文章图片
关于SurfaceView与高德地图互相穿透的解决方案
文章图片

@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if(hidden){ if(mapView!=null) { mapView.setVisibility(View.GONE); } } else { if(mapView!=null) { mapView.setVisibility(View.VISIBLE); } } }



当framgent显示的时候就把地图显示出来,当fragment失去焦点后把地图隐藏 了,这样就解决了地图穿透在相机预览界面上了。
好了下部解决相机穿透在地图上的问题,问题主要来源于surfaceView 所以我的思路是在fragment失去焦点后把surfanceview移除了
关于SurfaceView与高德地图互相穿透的解决方案
文章图片
关于SurfaceView与高德地图互相穿透的解决方案
文章图片

@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (hidden) { isVisible = false; linearLayoutCamera.removeAllViews(); // camera_root.setVisibility(View.GONE); if (camera != null) camera.release(); } else { //camera_root.setVisibility(View.VISIBLE); openCamera(); isVisible = true; } }



我的surfaceview是在linearlayout中。所以在失去焦点时把surfaceview直接移除掉,并把相机释放掉。减少内存的使用,并在获取焦点时再次打开相机并把surfaceview添加进来。以上就完美解决了互相穿透的BUG啦

    推荐阅读