我是靠谱客的博主 沉静溪流,最近开发中收集的这篇文章主要介绍surfaceview遮挡了上面的控件显示的解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在项目中使用到surfaceview做视频的实时流,遇到一个很奇葩的效果 ,在使用surfaceview因为surfaceview是双缓存机制,所以他需要设置

setZOrderOnTop(true);

让他显示在所依赖的窗口的最顶层才能更好的显示

这个是在surfaceview里面找到的源码。


遇到这样的情况的解决办法是在surfaceview调用

setZOrderOnTop(true)之后调用 setZOrderMediaOverlay(true)就可以了覆盖在surfaceview就会显示出来了 ,点击事件也同样的响应。


/**
 * 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.
 *
 * <p>Note that this must be set before the surface view's containing
 * window is attached to the window manager.
 *
 * <p>Calling this overrides any previous call to {@link #setZOrderOnTop}.
 */
public void setZOrderMediaOverlay(boolean isMediaOverlay) {
mWindowType = isMediaOverlay
? WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY

: WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
}
这是setZOrderMediaOverlay(true)的源码。


看这两个源码,看他注释应该就很容易懂了


最后

以上就是沉静溪流为你收集整理的surfaceview遮挡了上面的控件显示的解决方法的全部内容,希望文章能够帮你解决surfaceview遮挡了上面的控件显示的解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部