API 25 (Android 7.1.1 API) view.SurfaceView

来源:互联网 发布:mac 国家地理的图片 编辑:程序博客网 时间:2024/05/17 21:43

SurfaceView

public class SurfaceView

extends View

Added in API level 1

 

java.lang.Object

   ↳android.view.View

    ↳android.view.SurfaceView

 

已知直接子类:

GLSurfaceView

VideoView

 

【概述】

SurfaceViewView继承类,这个视图里内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸。Surfaceview控制这个Surface的绘制位置。

surface是纵深排序(Z-ordered)的,这表明它总在自己所在窗口的后面。surfaceview提供了一个可见区域,只有在这个可见区域内 的surface部分内容才可见,可见区域外的部分不可见。surface的排版显示受到视图层级关系的影响,它的兄弟视图结点会在顶端显示。这意味者surface的内容会被它的兄弟视图遮挡,这一特性可以用来放置遮盖物(overlays)(例如,文本和按钮等控件)。注意,如果surface上面 有透明控件,那么它的每次变化都会引起框架重新计算它和顶层控件的透明效果,这会影响性能。

你可以通过SurfaceHolder接口访问这个surfacegetHolder()方法可以得到这个接口。

surfaceview变得可见时,surface被创建;surfaceview隐藏前,surface被销毁。这样能节省资源。如果你要查看surface被创建和销毁的时机,可以重载surfaceCreated(SurfaceHolder)surfaceDestroyed(SurfaceHolder)

surfaceview的核心在于提供了两个线程:UI线程和渲染线程。这里应注意:

        ·所有SurfaceViewSurfaceHolder.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

手动渲染此视图(及其所有子项)给定的画布。在调用此函数之前,视图必须已经完成了完整的布局。当实现一个视图时,实现onDrawandroid.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 viewsurface是否放置在窗口中另一个正则surface view的顶部(但仍然在窗口本身之后)。 这通常用于将覆盖放置在底层媒体surface view的顶部。

注意,这必须在surface view的包含窗口附加到窗口管理器之前设置。

调用此方法将覆盖对setZOrderOnTopboolean)的任何先前调用。

 

SetZOrderOnTop

public void  setZOrderOnTop (boolean onTop)

API5

控制surface view的表面是否放置在其窗口的顶部。 通常,它放在窗口后面,以使其(大部分)看起来与层次结构中的视图合成。 通过设置此项,您可以将其放置在窗口上方。 这意味着SurfaceView的窗口的内容不会出现在它的表面之上。

注意,这必须在surface view的包含窗口附加到窗口管理器之前设置。

调用这将覆盖任何以前的调用setZOrderMediaOverlayboolean)。

 

【受保护的方法】

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

0 0
原创粉丝点击