您的位置:首页 > 其它

VedioView和SurfaceView的一个奇怪特性

2016-04-25 19:10 716 查看

VedioView和SurfaceView的一个奇怪特性

之前在使用VedioView的过程中经常发现他有一个黑色背景,而且无论怎么setBackground都无法改变。

看了别人的博客知道了原来VedioView绘制背景在视频的上面,如果setBackground为全白,那么白色就把视频全部覆盖了.

那么怎么改变VedioView的背景色呢,如果我们想要一个白色背景的VedioView,在没有任何东西的时候显示一个白色底而不是默认颜色的底呢。

其实黑色的背景不是来自于VedioView本身。VedioView继承的SurfaceView中有如下代码

@Override
public void draw(Canvas canvas) {
if (mWindowType != WindowManager.LayoutParams.TYPE_APPLICATION_PANEL) {
// draw() is not called when SKIP_DRAW is set
if ((mPrivateFlags & PFLAG_SKIP_DRAW) == 0) {
// punch a whole in the view-hierarchy below us
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
}
}
super.draw(canvas);
}


直接打穿所有在我们下面的View树,直接使用了画笔的清除模式。那么全部清除了之后,保留的底色是什么呢,就是当前窗口的背景颜色了

在VedioView下面放置一个View来做背景是无效的

而我之前是因为使用了Dark风格的theme所以成了黑色

例如将窗口颜色设为透明

@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().setBackgroundDrawable(new ColorDrawable(0x00ffffff));
super.onCreate(savedInstanceState);
}


则VedioView没内容时显示成透明的,甚至透到launcher界面了

这都是我自己写例子得出的结论,不知道理论上是不是这样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: