关于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
- 关于SurfaceView与高德地图互相穿透的解决方案
- react-native 与高德地图(amap)原生互相调用
- 关于Fragment叠加点击穿透的解决方案
- 高德地图 key获取与Key错误解决方案
- 关于高德地图的城市定位
- 缓存穿透与缓存雪崩的解决方案
- 关于android高德地图地图无法显示的问题
- Android Studio 关于高德地图的开发:显示地图
- angular4与高德地图的结合
- 谷歌地图与高德地图的一个差异
- 关于百度地图和高德地图,关于地图坐标系
- 关于缓存穿透、缓存并发、缓存失效的解决方案
- 关于缓存穿透、缓存并发、缓存失效的解决方案
- 关于缓存穿透、缓存并发、缓存失效的解决方案
- 关于缓存穿透、缓存并发、缓存失效的解决方案
- 关于Fragment点击事件穿透的三个解决方案
- 百度地图和高德地图,关于地图坐标系
- 缓存雪崩与穿透解决方案
- Android.mk语法详解
- android 添加安装权限白名单
- 并查集
- Wireshark如何抓明文用户名和密码
- Android存储选项简析
- 关于SurfaceView与高德地图互相穿透的解决方案
- 并查集
- iOS textFiled密文明文切换的问题
- iOS开发之CLAuthorizationStatus枚举
- yarn 安装 使用以及安装时出现的问题
- Android数据库--LitePal
- Qt之应用程序打包发行
- font-family
- 卷积神精网络的工作原理