普通的Android控件,例如TextView、Button和CheckBox等,它们都是将自己的UI绘制在宿主窗口的绘图表面之上,这意味着它们的UI是在应用程序的主线程中进行绘制的。由于应用程序的主线程除了要绘制UI之外,还需要及时地响应用户输入,否则的话,系统就会认为应用程序没有响应了,因此就会弹出一个ANR对话框出来。对于一些游戏画面,或者摄像头预览、视频播放来说,它们的UI都比较复杂,而且要求能够进行高效的绘制,因此,它们的UI就不适合在应用程序的主线程中进行绘制。这时候就必须要给那些需要复杂而高效UI的视图生成一个独立的绘图表面,以及使用一个独立的线程来绘制这些视图的UI。
一个SurfaceView就是一个被特殊实现的View,除具备一个View的普遍属性外,它拥有自己专门的一个surface,以便让应用直接在里面绘制内容。该SurfaceView是独立于其所属window(记为MainWindow)的view hierarchy,view hierarchy中的view们共享MainWindow那一个surface。SurfaceView 的工作原理比你想的要简单——SurfaceView所做的全部就是要求Window Manager创建一个window,并告诉Window Manager所创建的window的Z轴顺序(Z-order),这个Z轴顺序可以帮助Window Manager决定将新建的window置于MainWindow的上面还是下面。然后,Window Manager会将新建的window定位到SurfaceView在MainWindow中占用的位置。如果新建window在MainWindow后面,SurfaceView会将它在MainWindow中占据的部分变透明,以便让该window显示出来。
SurfaceView
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享...
- 参考:http://blog.csdn.net/heikefangxian23/article/details/5...
- 在一般的Android程序中,UI都是在主线程处理,但是,有些可能比较复杂的动画会卡顿主线程,如相机,为了解决这个...
- 圆的构想貌似也画了很多天了,突然卡壳想不出来了,于是又开始作怪了,画吧里画个视频看看,也不晓得有木有小朋友上当的~...