1. SurfaceView遮挡其他控件的项目背景:

    最近在做播放器项目,由于底层实现是用Surface和OpenGL切换渲染,所以在布局里面同时使用了GLSurfaceView和SurfaceView,同时播放控制按钮是自定义的,也没有使用Android自己提供的MediaCtroller控件。在这种背景下,问题出现了,如果有相关开发基础的同学应该知道,当SurfaceView和GLSurfaceView同时在一个布局里面,如果想让SurfaveView显示图片或者视频必须要调用SurfaceView.setZOrderOnTop(true),也就是说必须把SurfaceView置于Activity显示窗口的最顶层才能正常显示,然后调用了SurfaceView.setZOrderOnTop(true)又导致了其他控件比如播放、快进等按钮被遮挡。网上有很多解决方案,比如解决SurfaceView设置透明造成遮盖其他组件的替代方案,对于视频播放的页面都不够完美,因为它是直接在SurfaceView上面绘制相关的控件,试想一下如果在SurfaceView的某些区域绘制了一些按钮,势必会挡住一部分视频画面,这样对于用户来说是很难接受的。

  2. 从SurfaceView源码中寻找解决方案:

    由于在网上找的解决方案都不能满足要求,没办法有折回来查看了下SurfaceView的源码,在查看源码的时候看到这个方法setZOrderMediaOverlay(boolean isMediaOverlay),下来我们来看看源码中对这个方法的描述:

    Control whether the surface view‘s surface is placed on top of another regular surface view in the window (but still behind the window itself).This is typically used to place overlays on top of an underlying media surface view.

Note that this must be set before the surface view‘s containing window is attached to     the window manager.

Calling this overrides any previous call to {@link #setZOrderOnTop}.

大概的意思就是说控制窗口中表面的视图层是否放置在常规视图层的顶部。

最终,我在调用setZOrderOnTop(true)之后调用了setZOrderMediaOverlay(true),OK,遮挡问题完美解决!

本文出自 “西城天部” 博客,请务必保留此出处http://marller.blog.51cto.com/8699646/1762028

解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件的问题的更多相关文章

  1. 解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件

    解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件的问题 http://marller.blog.51cto.com/8699646/1762028 FAQ: Surf ...

  2. 解决tableView中cell动态加载控件的重用问题

    解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问 ...

  3. C# 线程调用主线程中的控件

    由于项目的需要,最近几天一直在做串口和数据库.由于C#使用的时间不长,所以在编写代码和调试的过程中总是遇到意想不到的问题,比如在使用串口接收数据的时候,在接收数据事件中想把接收的数据放入一个textb ...

  4. Android 调用相册 拍照 实现系统控件缩放 切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...

  5. selenium显示等待解决浏览器未加载完成查找控件的问题

    问题描述:wap版支付成功后,跳转到支付成功页,查找的元素已出现,如图的:元素1,元素2,但是提示查找的元素超时,失败,并且每到这个页面都会报页面超时,不能查找到页面元素 原始代码: try{ op. ...

  6. Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...

  7. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  8. Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)

    Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. ...

  9. 如何使用Python调用AutoIt来实现Flash控件的上传功能

    先看一段代码 upload.au3(这个后缀autoit3的格式): ;等待出现title为数据采集-军课网-MozillaFirefox的浏览器窗口 WinWait("数据采集 - XX网 ...

随机推荐

  1. 汉诺塔问题hdu 2065——找规律

    这类题目就是纸上模拟,找规律. 问题描述:在一块铜板上有三根杆,目的是将最左边杆上的盘全部移到右边的杆上,条件是不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允 ...

  2. pageX,clientX,offsetX,screenX,offsetLeft,style.left,offsetWidth,scrollWidth的区别以及使用详解

    https://www.cnblogs.com/echolun/p/9231760.html

  3. python django 基本测试 及调试 201812

    #####20181225 1.python解决SNIMissingWarning和InsecurePlatformWarning警告在想要获取https站点的资源时,会报出SNIMissingWar ...

  4. perf命令

    @(Linux基础)[perf命令] perf命令 ---- 简介 Perf是内置于Linux内核源码树中的性能剖析(profiling)工具,它基于事件采样原理,以性能事件为基础,支持针对处理器相关 ...

  5. SQL Server Reporting Service(SSRS) 第五篇 自定义数据处理扩展DPE(Data Processing Extension)

    最近在做SSRS项目时,遇到这么一个情形:该项目有多个数据库,每个数据库都在不同的服务器,但每个数据库所拥有的数据库对象(table/view/SPs/functions)都是一模一样的,后来结合网络 ...

  6. epoll中坑人的地方再次学习

    https://blog.csdn.net/linuxheik/article/details/73294658

  7. java lamda

    // 查询数据模拟 List<SealListViewVo> list = new ArrayList<SealListViewVo>(); for (int i = 0; i ...

  8. 局部安装webpack时,使用webpack命令时提示webpack不是内部命令解决方法

    现在js发展太快了,根本看不懂啊.于是乎想做做功课,于是乎看到了这些“奇怪”的写法,原来好多都是遵循了 ECMASCRIPT6,好吧,在本地看看怎么用的吧.写在本地的环境下, 发现各种报错,根本不能用 ...

  9. [转]理解js中的原型链,prototype与__proto__的关系

    本文转自:http://rockyuse.iteye.com/blog/1426510 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script typ ...

  10. node.js运行环境变量配置

    -----Windows cmd---------- 1. echo %PATH%  输出Path环境变量 2.set NODE_ENV=testing 定义环境变量 3.echo %NODE_ENV ...