Android切换至SurfaceView时闪屏(黑屏闪一下)以及黑屏移动问题的解决方法

作者:Joanna.Yan 时间:2023-07-21 10:51:45 

1.最近的项目中,有一个Activity用到Fragment+ViewPager,其中一个fragment中实现了视频播放的功能,包含有SurfaceView。结果,每次打开程序第一次进入到该Activity时都会闪屏黑一下。原因就出在SurfaceView。

详解:

I think I found the reason for the black flash. In my case I'm using a SurfaceView inside a Fragment and dynamically adding this fragment to the activity after some action. The moment when I add the fragment to the activity, the screen flashes black. I checked out grepcode for the SurfaceView source and here's what I found: when the surface view appears in the window the very fist time, it requests the window's parameters changing by calling a private IWindowSession.relayout(..) method. This method “gives” you a new frame, window, and window surface. I think the screen blinks right at that moment.
  The solution is pretty simple: if your window already has appropriate parameters it will not refresh all the window's stuff and the screen will not blink. The simplest solution is to add a 0px height plain SurfaceView to the first layout of your activity. This will recreate the window before the activity is shown on the screen, and when you set your second layout it will just continue using the window with the current parameters. I hope this helps.

原因:

SurfaceView因为不同于一般的view,它有自己良好的缓冲以及数据存取机制,系统对他有特殊处理。当surfaceview第一次在当前activity上添加的时候,系统会给WindowManager重新排布局,relayout,这样就会黑一下,这个只会出现在第一次,以后再添加surfaceview时就不会黑屏了。

解决:

可以在没有进入surfaceview的界面(比如很多程序一进去就有个Loading界面)的时候,在其它界面的layout.xml文件中添加一个SurfaceView,宽和高都弄成0dp,这样对布局没影响,而且这个东西使得surfaceview第一次出现了,那么也就是说,下一次我们真正用到SurfaceView的时候就不会闪屏了。

2.viewpager中有surfaceview播放视频,来回滑屏时,关于黑屏移动问题

解决:

surfaceview.setZorderTop(true);

surfaceview.getHolder().setFormat(SurfaceView.TRANSPARENT);

来源:http://www.cnblogs.com/Joanna-Yan/p/4829325.html

标签:Android,surfaceview,闪屏
0
投稿

猜你喜欢

  • C# 格式化JSON的两种实现方式

    2023-03-14 05:31:16
  • C#开发WPF程序中的弱事件模式

    2022-11-21 12:50:34
  • C#在子线程中更新窗口部件的写法

    2022-04-01 09:57:50
  • Java程序图形用户界面设计之容器JFrame

    2023-04-27 04:58:30
  • Java中Cookie和Session详解及区别总结

    2022-08-24 21:55:10
  • asp.net core项目mvc权限控制:分配权限

    2023-09-06 04:24:13
  • JavaFx Tooltip悬浮提示使用及自定义代码详解

    2023-05-11 15:06:05
  • Android中ListView下拉刷新的实现代码

    2021-12-13 21:02:26
  • java8新特性之日期时间API

    2023-06-20 09:15:50
  • Unity实现场景加载功能

    2021-09-15 12:27:45
  • Java实现仿淘宝滑动验证码研究代码详解

    2022-12-28 00:51:11
  • Java JDK 动态 代理的使用方法示例

    2023-08-23 08:12:52
  • Android仿正点闹钟时间齿轮滑动效果

    2022-09-06 09:27:46
  • MyBatis图文并茂讲解注解开发多对多查询

    2022-10-27 17:05:04
  • Android使用ContentProvider实现查看系统短信功能

    2023-12-16 23:55:46
  • mybatis-plus查询源码详解

    2023-02-02 11:58:02
  • Gradle 依赖切换源码实践示例详解

    2023-02-21 13:21:44
  • Kotlin协程到底是如何切换线程的

    2022-03-03 13:52:39
  • C#/VB.NET 实现彩色PDF转为灰度PDF

    2021-07-23 08:23:49
  • Java实现驼峰、下划线互转的方法

    2023-08-18 09:17:54
  • asp之家 软件编程 m.aspxhome.com