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. java课内容2019.3.1

    java的相关了解博客:答疑 https://www.cnblogs.com/aishangJava/p/6862917.html 一.构造方法: 1.构造方法只能被编译器调用一次,并且是在创建对象时 ...

  2. 20-----BBS论坛

    BBS论坛(二十) 20.1.cms添加轮播图后台逻辑代码完成 (1)apps/models.py from exts import db from datetime import datetime ...

  3. Ordering Tasks UVA - 10305(拓扑排序)

    在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点. 先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一. 一直做改操作,直到所有的节点都被 ...

  4. JavaScript比较运算符——"== != === !=="区别

    JavaScript的比较和逻辑运算符用于测试 true 或 false. 比较运算符在逻辑语句中使用,以测定变量或值是否相等. 例如给定 x=5,下面的表格解释了比较运算符: 1. == 和===的 ...

  5. springmvc+mybatis+sql server实现简单登录功能

    一.源码: 1.Users.java package com.login.entity; import java.io.Serializable; public class Users impleme ...

  6. java连接数据库驱动代码综合共享

    1.Oracle8/8i/9i数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();S ...

  7. mongodb 用户权限控制

    MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),今天特地花了一点时间研究了一下,研究成果如下: 注:研究成果基于W ...

  8. Visual Studio 要求导入 pfx 密钥以及导入后依然要求导入的解决办法

    本文为个人博客备份文章,原文地址: http://validvoid.net/visual-studio-pfx-import/ 导入密钥 在使用 Visual Studio 生产项目时,使用 pfx ...

  9. 斗鱼扩展--localStorage备份与导出(九)

    之前我们都把数据 放在了 localStorage 里,但扩展一旦卸载,数据就会被清空, 在Console里备份,一次只能输出一条,小白操作起来很不方便,所以能不能 导入,导出文件来进行备份还原呢? ...

  10. Http和Https的区别--笔记

    学习链接: 知乎:https://www.zhihu.com/question/19577317 法号桑菜 http://blog.csdn.net/jasonjwl/article/details/ ...