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界面了
这都是我自己写例子得出的结论,不知道理论上是不是这样
相关文章推荐
- 路漫漫其修远兮,吾将上下而求索。
- 史上最牛最全android开发知识汇总
- Storm 1.0.0 正式发布
- hdu1302The Snail
- 近期计划,理清思路,大步向前
- 如何对西数硬盘固件进行逆向分析
- ボルツマンマシン
- ANSYS WORKBENCH中划分网格的几种方法
- 爬山演算法
- php数组随机抽取函数shuffle()和array_rand()
- jQuery的封装方式与JS中new的实现原理
- Mysql事务探索及其在Django中的实践(一)
- Linux 系统应用编程——进程基础
- 【收藏用】--切勿转载Java处理XML的三种主流技术及介绍
- PHP运算符===和==的区别
- javascript 中的闭包
- 批处理-字符串操作
- Anaconda 下各种第三方库的安装
- salt-minion端修改主机名
- 操作系统的特征