surfaceview遮挡了上面的控件显示的解决方法

文章讲述了在项目中使用SurfaceView处理视频流时遇到的显示问题,通过设置setZOrderOnTop和setZOrderMediaOverlay来确保视频在层级结构中的正确显示,以及为何透明度设置无效。
摘要由CSDN通过智能技术生成

最近在项目中使用到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控件设置透明是不能解决问题的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中的SurfaceView是用于在后台线程上绘制复杂图形和动画效果的视图。当在SurfaceView上绘制图形时,可能会遇到遮挡问题,原因有以下几种: 1. Z轴顺序问题:绘制在SurfaceView上的绘图会按照绘制顺序进行堆叠,后绘制的绘图会覆盖先绘制的绘图。所以如果某个图形遮挡了其他图形,可以尝试调整绘制的顺序。 2. 透明度问题:如果SurfaceView或绘制的图形具有不透明度,那么它们可能会遮挡后面的图形。可以尝试调整透明度,或者使用透明背景。 3. 窗口遮挡:如果SurfaceView所在的窗口被其他窗口遮挡,那么SurfaceView上的图形也会被遮挡。可以尝试将SurfaceView所在的窗口移到顶层。 4. 大小和位置设置问题:如果SurfaceView的大小或位置设置不正确,也会导致图形被遮挡。可以尝试调整SurfaceView的大小和位置。 解决这些问题的方法有以下几种: 1. 调整绘制顺序:你可以尝试修改绘制的顺序,让需要显示在前面的图形后绘制。 2. 调整透明度:如果SurfaceView或绘制的图形具有透明度,可以尝试调整透明度来解决遮挡问题。 3. 调整窗口设置:如果SurfaceView所在的窗口被其他窗口遮挡,可以尝试调整窗口设置,将SurfaceView所在的窗口移到顶层。 4. 调整SurfaceView的大小和位置:确保SurfaceView的大小和位置设置正确,以免遮挡其他图形。 总之,遮挡问题可能由于绘制顺序、透明度、窗口设置或SurfaceView的大小和位置设置不正确而引起。通过调整这些参数,可以解决SurfaceView遮挡的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值