MyException - 我的异常网
当前位置:我的异常网» 移动开发 » SurfaceView透到圆桌面导致画面闪烁

SurfaceView透到圆桌面导致画面闪烁

www.MyException.Cn  网友分享于:2013-09-17  浏览:0次
SurfaceView透到桌面导致画面闪烁
这两天遇到这样的bug:播放视频的时候,会先闪现一下桌面再显示视频。

第一我想到的是activity 的window background设置为了null,找到对应的activity (/packages/apps/Gallery2/src/com/android/gallery3d/app/MovieActivity.java)将
// We set the background in the theme to have the launching animation.
     // But for the performance (and battery), we remove the background here.
      win.setBackgroundDrawable(null); win.setBackgroundDrawable()设置为一张图片。运行问题仍存在。

接着我看了播放视频MovieActivity的布局文件:
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/movie_view_root"
       android:background="@android:color/black"
       android:layout_width="match_parent"
      android:layout_height="match_parent">
   //这里使用了自定义的surfaceview来播放视频
</RelativeLayout>
这个布局文件里也设置了黑色的背景。接着我也修改了activity的主题,还是没有作业。按道理不可能看到桌面才对!可是事实是看到了!

最后定位到了SurfaceView,最后在网上搜索了到SurfaceView的原理:
http://blog.csdn.net/luoshengyang/article/details/8661317/

注意,用来描述SurfaceView的Layer或者LayerBuffer的Z轴位置是小于用来其宿主Activity窗口的Layer的Z轴位置的,但是前者会在后者的上面挖一个“洞”出来,以便它的UI可以对用户可见。实际上,SurfaceView在其宿主Activity窗口上所挖的“洞”只不过是在其宿主Activity窗口上设置了一块透明区域。

接着我按照网上的方法,修改
setZOrderOnTop(true);   
mHolder.setFormat(PixelFormat.TRANSPARENT);//设置背景透明

但这种做法会使得surfaceView属于view树的顶层,导致将其他的播放按钮挡住了。
最后再同事的提醒下参考了/packages/apps/Gallery2/src/com/android/gallery3d/ui/GLRootView.java这里的做法。
增加一层view来遮住surfaceview.

GLSurfaceView也是继承Surfaceview,所以也同样有透明到桌面的问题。

       // We put a black cover View in front of the SurfaceView and hide it
        // after the first draw. This prevents the SurfaceView being transparent
       // before the first draw.
       if (mFirstDraw) {
          mFirstDraw = false;
            post(new Runnable() {
                  @Override
                    public void run() {
                      View root = getRootView();
                       View cover = root.findViewById(R.id.gl_root_cover);
                       cover.setVisibility(GONE);
                    }
                });
       }


所以我也在
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/movie_view_root"
       android:background="@android:color/black"
       android:layout_width="match_parent"
      android:layout_height="match_parent">
   //这里使用了自定义的surfaceview来播放视频
  //增加一层cover
<View android:id="@+id/root_cover"
           android:layout_width="match_parent"
            android:layout_height="match_parent"
           android:background="@android:color/black"/>
</RelativeLayout>
当视频prepare完成之后将这个cover隐藏起来。在MediaPlayer.OnPreparedListener回调函数里增加
 if (mFirstDraw) {
          mFirstDraw = false;
            post(new Runnable() {
                  @Override
                    public void run() {
                      View root = getRootView();
                       View cover = root.findViewById(R.id.gl_root_cover);
                       cover.setVisibility(GONE);
                    }
                });
       }


问题完美解决。

文章评论

鲜为人知的编程真相
鲜为人知的编程真相
程序员都该阅读的书
程序员都该阅读的书
每天工作4小时的程序员
每天工作4小时的程序员
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
漫画:程序员的工作
漫画:程序员的工作
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
那些争议最大的编程观点
那些争议最大的编程观点
如何成为一名黑客
如何成为一名黑客
Java程序员必看电影
Java程序员必看电影
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
老程序员的下场
老程序员的下场
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
一个程序员的时间管理
一个程序员的时间管理
程序员和编码员之间的区别
程序员和编码员之间的区别
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
我是如何打败拖延症的
我是如何打败拖延症的
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
代码女神横空出世
代码女神横空出世
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
10个调试和排错的小建议
10个调试和排错的小建议
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
中美印日四国程序员比较
中美印日四国程序员比较
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员必看的十大电影
程序员必看的十大电影
 程序员的样子
程序员的样子
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员的鄙视链
程序员的鄙视链
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有