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

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


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


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

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

我的做法是这样的

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值