当前位置:网站首页>SurfaceView 闪屏(黑一下问题)
SurfaceView 闪屏(黑一下问题)
2022-07-25 09:21:00 【飞翔的时光机】
SurfaceView 闪屏(黑一下问题)
使用SurfaceView发现在surfaceCreated和surfaceDestroyed的时候,预览区域会闪烁一下,录屏下可以发现页面会先出现一个半黑的界面。
查了下资料,因为SurfaceView的绘画是在setContentView之后的,SurfaceView因为不同于一般的view,它有自己良好的缓冲以及数据存取机制,系统对他有特殊处理。当surfaceview第一次在当前activity上添加的时候,系统会给WindowManager重新排布局,relayout,这样就会黑一下,因为SurfaceView还没开始画,界面没有显示内容。而且SurfaceView渲染的方式,它在渲染的时候应该是将所有在它下面的全部View都“挖空”,然后渲染自己。
a. 找了很多地方查找问题比如有人说在前一个Activity布局文件中加入一个宽高为0dp的SurfaceView可以避免这个,但是这种方法在我这里没有根本解决问题。只是黑的时间 会更短点,但是还是有闪一下的感觉。
b. 尝试过,先使surfaceView不可见(INVisible),等 onDrawFrame结束后再可见。结果还是 还是不行, onDrawFrame 之后,整个预览区域都是黑的。
c. 还有一种比较繁琐但是可以用的方法是 使用遮罩层覆盖的方式。进入页面先显示遮罩层,等SurfaceView可用的时候,再隐藏遮罩层。
d. 跟踪源码发现: 还有一个更简单的方法是:
就是把Surface 的背景颜色改为透明,这样就默认不会显示黑色背景,这样就可以避免闪的问题。
还有一个是 要把Surface 由于是采用 挖空的方式显示,因此 可以这里需要将它设置在父控件index=0的地方,处于最底端。挖空的时候不会挖到其他的View。
实现代码如下:
surfaceview.setZorderTop(true);
surfaceview.getHolder().setFormat(SurfaceView.TRANSPARENT);
边栏推荐
猜你喜欢
![[De1CTF 2019]SSRF Me](/img/12/44c37cc713b49172a10579c9628c94.png)
[De1CTF 2019]SSRF Me

浏览器访问swagger失败,显示错误ERR_UNSAFE_PORT

~4.2 ccf 2021-12-1 序列查询

Idea practical tips --- now change pom.xml (red) to pom.xml (blue)

单例模式(Singleton)

OC -- Foundation -- array

@3-2 CCF 2020-12-2 期末预测之最佳阈值
![[GYCTF2020]Node Game](/img/8d/7e6c2fb2a0359298fbcc1cd8544710.png)
[GYCTF2020]Node Game

Thick willow dustpan, thin willow bucket, who hates reptile man? Asynchronous synergism, half a second to strip away a novel

UI——无限轮播图和分栏控制器
随机推荐
Understand why we should rewrite the equals method and hashcode method at the same time + example analysis
¥1-1 SWUST oj 941: 有序顺序表的合并操作的实现
@4-1 CCF 2020-06-1 线性分类器
Deep understanding of static keyword
Flex layout syntax and use cases
*6-2 CCF 2015-03-3 节日
自定义Dialog 实现 仿网易云音乐的隐私条款声明弹框
如何将Jar包部署到服务器,注:启动命令有无nohup有很大关系
Go基础2
Go foundation 1
Swift创作天气APP
Operation 7.19 sequence table
【代码源】每日一题 树
语音聊天app源码-钠斯网络源码出品
【代码源】每日一题 非递减01序列
How to write Android switching interface with kotlin
【代码源】每日一题 简单字段和
梦想启航(第一篇博客)
STM32+HC05串口蓝牙设计简易的蓝牙音箱
关于C和OC