您的位置:首页 > 移动开发 > Android开发

API 25 (Android 7.1.1 API) view.SurfaceView

2016-11-23 14:58 363 查看
SurfaceView
public class SurfaceView
extends View

Added in
API level 1
 
java.lang.Object
   ↳android.view.View
    ↳android.view.SurfaceView
 
已知直接子类:
GLSurfaceView
VideoView
 

【概述】

SurfaceView是View继承类,这个视图里内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸。Surfaceview控制这个Surface的绘制位置。
surface是纵深排序(Z-ordered)的,这表明它总在自己所在窗口的后面。surfaceview提供了一个可见区域,只有在这个可见区域内
的surface部分内容才可见,可见区域外的部分不可见。surface的排版显示受到视图层级关系的影响,它的兄弟视图结点会在顶端显示。这意味者surface的内容会被它的兄弟视图遮挡,这一特性可以用来放置遮盖物(overlays)(例如,文本和按钮等控件)。注意,如果surface上面
有透明控件,那么它的每次变化都会引起框架重新计算它和顶层控件的透明效果,这会影响性能。
你可以通过SurfaceHolder接口访问这个surface,getHolder()方法可以得到这个接口。
surfaceview变得可见时,surface被创建;surfaceview隐藏前,surface被销毁。这样能节省资源。如果你要查看surface被创建和销毁的时机,可以重载surfaceCreated(SurfaceHolder)和surfaceDestroyed(SurfaceHolder)。
surfaceview的核心在于提供了两个线程:UI线程和渲染线程。这里应注意:
        ·所有SurfaceView和SurfaceHolder.Callback的方法都应该在UI线程里调用,一般来说就是应用程序主线程。渲染线程所要访问的各种变量应该作同步处理。
       ·由于surface可能被销毁,它只在SurfaceHolder.Callback.surfaceCreated()和
 SurfaceHolder.Callback.surfaceDestroyed()之间有效,所以要确保渲染线程访问的是合法有效的surface。
 

【继承自view.View的XML属性】

跳转view.View
 

【公共构造函数】

SurfaceView(Context context)  
 
SurfaceView(Context context, AttributeSet attrs)  
 
SurfaceView(Context context, AttributeSet attrs, int defStyleAttr)  
 
SurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)  
 

【公共方法】

draw
public void  draw (Canvas canvas) 
API1
手动渲染此视图(及其所有子项)
d529
给定的画布。在调用此函数之前,视图必须已经完成了完整的布局。当实现一个视图时,实现onDraw(android.graphics.Canvas)而不是覆盖这个方法。如果你确实需要重写这个方法,调用超类的版本。
 
gatherTransparentRegion
public boolean  gatherTransparentRegion (Region region) 
API1
当视图层次包含一个或多个SurfaceView时,由RootView使用它来执行优化。SurfaceView总是被认为是透明的,但它的子元素不是透明的,因此所有的View对象从全局透明区域中删除(作为参数传递给这个函数)。
如果此时视图的有效可见性不透明,则返回true,而不管透明区域;如果可能在视图后面看到基础窗口,则返回false。
 
getHolder
public SurfaceHolder  getHolder ()
API1
返回SurfaceHolder,提供对此SurfaceView底层surface的访问和控制。
 
setSecure
public void  setSecure (boolean isSecure) 
API17
控制surface view的内容是否应被视为安全,以防止其显示在屏幕截图中或在非安全显示器上查看。
注意,这必须在surface view的包含窗口附加到窗口管理器之前设置。
有关详细信息,请参阅FLAG_SECURE。
 
setVisibility
public void  setVisibility (int visibility)
API1
设置视图的可见性。
 
setZOrderMediaOverlay
public void  setZOrderMediaOverlay (boolean isMediaOverlay)
API5
控制surface view的surface是否放置在窗口中另一个正则surface
view的顶部(但仍然在窗口本身之后)。 这通常用于将覆盖放置在底层媒体surface view的顶部。
注意,这必须在surface view的包含窗口附加到窗口管理器之前设置。
调用此方法将覆盖对setZOrderOnTop(boolean)的任何先前调用。
 
SetZOrderOnTop
public void  setZOrderOnTop (boolean onTop)
API5
控制surface view的表面是否放置在其窗口的顶部。 通常,它放在窗口后面,以使其(大部分)看起来与层次结构中的视图合成。 通过设置此项,您可以将其放置在窗口上方。 这意味着SurfaceView的窗口的内容不会出现在它的表面之上。
注意,这必须在surface view的包含窗口附加到窗口管理器之前设置。
调用这将覆盖任何以前的调用setZOrderMediaOverlay(boolean)。
 

【受保护的方法】

protected void  dispatchDraw (Canvas canvas)
API1
protected void  onAttachedToWindow ()
API1
protected void  onDetachedFromWindow ()
API1
protected void  onMeasure (int widthMeasureSpec, int heightMeasureSpec)
API1
protected void  onWindowVisibilityChanged (int visibility)
API1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息