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

来源:互联网 发布:手表选择 知乎 编辑:程序博客网 时间:2024/06/13 08:00

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


好了,看到了解决方案了很开心,然后高高兴兴去改了。符截图


也不知道是不是我用的姿势不对,发现并没什么luan用,怎么办呢?毕竟问题要解决是吧,首先从framelayout入手framelayout是将布局层叠在一块,会相互穿透会不会就是因为这个重叠的原因呢,既然和hidefragment无法解决,是不是可以通过visible解决呢。

那什么时候显示什么时候隐藏呢。

我的做法是这样的

@Overridepublic 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移除了

@Overridepublic 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啦

1 0
原创粉丝点击