Most visited

Recently visited

Added in API level 1

SurfaceView

public class SurfaceView
extends View

java.lang.Object
   ↳ android.view.View
     ↳ android.view.SurfaceView
Known Direct Subclasses


提供嵌入视图层次结构内部的专用绘图表面。 你可以控制这个表面的格式,如果你喜欢,它的大小; SurfaceView负责将表面放置在屏幕上的正确位置

表面是Z排列的,以便它在窗口后面保持其SurfaceView; SurfaceView在其窗口中打出一个孔以允许其表面显示。 视图层次结构将负责正确地合成Surface中通常出现在其上的任何SurfaceView的同胞。 这可用于在Surface上放置诸如按钮之类的叠加层,但请注意,它可能会影响性能,因为每次Surface变化时都会执行完整的alpha混合组合。

使表面可见的透明区域基于视图层次结构中的布局位置。 如果使用布局后转换属性在SurfaceView顶部绘制同级视图,则视图可能无法与表面正确合成。

通过SurfaceHolder接口提供对底层表面的访问,通过调用 getHolder()可以获取该接口。

当SurfaceView的窗口可见时,Surface将为您创建; 你应该实现surfaceCreated(SurfaceHolder)surfaceDestroyed(SurfaceHolder)来发现当窗口被显示和隐藏时Surface何时被创建和销毁。

这个类的目的之一是提供一个辅助线程可以渲染到屏幕中的表面。 如果你要这样使用它,你需要知道一些线程语义:

注意:从平台版本N ,SurfaceView的窗口位置将与其他视图渲染同步更新。 这意味着在屏幕上翻译和缩放SurfaceView不会导致渲染失真。 当其窗口异步定位时,此类工件可能会出现在以前版本的平台上。

Summary

Inherited XML attributes

From class android.view.View

Inherited constants

From class android.view.View

Inherited fields

From class android.view.View

Public constructors

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

Public methods

void draw(Canvas canvas)

手动将此视图(及其所有子项)呈现给定的Canvas。

boolean gatherTransparentRegion(Region region)

当视图层次结构包含一个或多个SurfaceView时,RootView将使用它来执行优化。

SurfaceHolder getHolder()

返回SurfaceHolder,提供对此SurfaceView底层曲面的访问和控制。

void setSecure(boolean isSecure)

控制是否应将表面视图的内容视为安全,防止其显示在屏幕截图中或在非安全显示器上查看。

void setVisibility(int visibility)

设置此视图的启用状态。

void setZOrderMediaOverlay(boolean isMediaOverlay)

控制表面视图的表面是否放置在窗口中另一个常规表面视图的顶部(但仍在窗口本身后面)。

void setZOrderOnTop(boolean onTop)

控制表面视图的表面是否放置在窗口的顶部。

Protected methods

void dispatchDraw(Canvas canvas)

通过绘制来绘制子视图。

void onAttachedToWindow()

这在视图附加到窗口时被调用。

void onDetachedFromWindow()

这是在视图从窗口分离时调用的。

void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

测量视图及其内容以确定测量宽度和测量高度。

void onWindowVisibilityChanged(int visibility)

叫当包含窗口具有改变其可见性(间 GONEINVISIBLE ,和 VISIBLE )。

Inherited methods

From class android.view.View
From class java.lang.Object
From interface android.graphics.drawable.Drawable.Callback
From interface android.view.KeyEvent.Callback
From interface android.view.accessibility.AccessibilityEventSource

Public constructors

SurfaceView

Added in API level 1
SurfaceView (Context context)

Parameters
context Context

SurfaceView

Added in API level 1
SurfaceView (Context context, 
                AttributeSet attrs)

Parameters
context Context
attrs AttributeSet

SurfaceView

Added in API level 1
SurfaceView (Context context, 
                AttributeSet attrs, 
                int defStyleAttr)

Parameters
context Context
attrs AttributeSet
defStyleAttr int

SurfaceView

Added in API level 21
SurfaceView (Context context, 
                AttributeSet attrs, 
                int defStyleAttr, 
                int defStyleRes)

Parameters
context Context
attrs AttributeSet
defStyleAttr int
defStyleRes int

Public methods

draw

Added in API level 1
void draw (Canvas canvas)

手动将此视图(及其所有子项)呈现给定的Canvas。 在调用这个函数之前,视图必须已经完成了一个完整的布局。 在实现视图时,实现onDraw(android.graphics.Canvas)而不是重写此方法。 如果您确实需要重写此方法,请调用超类版本。

Parameters
canvas Canvas: The Canvas to which the View is rendered.

gatherTransparentRegion

Added in API level 1
boolean gatherTransparentRegion (Region region)

当视图层次结构包含一个或多个SurfaceView时,RootView将使用它来执行优化。 SurfaceView始终被认为是透明的,但它的子项不是,因此所有View对象都从全局透明区域中移除(作为参数传递给此函数)。

Parameters
region Region: The transparent region for this ViewAncestor (window).
Returns
boolean Returns true if the effective visibility of the view at this point is opaque, regardless of the transparent region; returns false if it is possible for underlying windows to be seen behind the view.

getHolder

Added in API level 1
SurfaceHolder getHolder ()

返回SurfaceHolder,提供对此SurfaceView底层曲面的访问和控制。

Returns
SurfaceHolder SurfaceHolder The holder of the surface.

setSecure

Added in API level 17
void setSecure (boolean isSecure)

控制是否应将表面视图的内容视为安全,防止其显示在屏幕截图中或在非安全显示器上查看。

请注意,这必须在表面视图的包含窗口连接到窗口管理器之前设置。

有关详细信息,请参阅 FLAG_SECURE

Parameters
isSecure boolean: True if the surface view is secure.

setVisibility

Added in API level 1
void setVisibility (int visibility)

设置此视图的启用状态。

Parameters
visibility int: One of VISIBLE, INVISIBLE, or GONE.

setZOrderMediaOverlay

Added in API level 5
void setZOrderMediaOverlay (boolean isMediaOverlay)

控制表面视图的表面是否放置在窗口中另一个常规表面视图的顶部(但仍在窗口本身后面)。 这通常用于将覆盖图放置在基础媒体表面视图的顶部。

请注意,这必须在表面视图的包含窗口连接到窗口管理器之前设置。

调用此操作将覆盖之前的任何呼叫 setZOrderOnTop(boolean)

Parameters
isMediaOverlay boolean

setZOrderOnTop

Added in API level 5
void setZOrderOnTop (boolean onTop)

控制表面视图的表面是否放置在窗口的顶部。 通常它被放置在窗口后面,允许它(大部分)看起来与层次结构中的视图合成。 通过设置它,可以将它放置在窗口上方。 这意味着这个SurfaceView窗口的内容都不会在其表面上可见。

请注意,这必须在表面视图的包含窗口连接到窗口管理器之前设置。

调用此操作将覆盖之前的任何呼叫 setZOrderMediaOverlay(boolean)

Parameters
onTop boolean

Protected methods

dispatchDraw

Added in API level 1
void dispatchDraw (Canvas canvas)

通过绘制来绘制子视图。 这可能会被派生类重写,以便在子对象被绘制之前获得控制权(但在绘制自己的视图之后)。

Parameters
canvas Canvas: the canvas on which to draw the view

onAttachedToWindow

Added in API level 1
void onAttachedToWindow ()

这在视图附加到窗口时被调用。 此时它有一个Surface并将开始绘制。 请注意,此功能保证在onDraw(android.graphics.Canvas)之前onDraw(android.graphics.Canvas) ,但可以在第一次onDraw之前的任何时候调用此函数 - 包括onMeasure(int, int)之前或之后。

onDetachedFromWindow

Added in API level 1
void onDetachedFromWindow ()

这是在视图从窗口分离时调用的。 此时它不再有绘图表面。

onMeasure

Added in API level 1
void onMeasure (int widthMeasureSpec, 
                int heightMeasureSpec)

测量视图及其内容以确定测量宽度和测量高度。 此方法由measure(int, int)调用, measure(int, int)子类覆盖以提供其内容的准确和有效的度量。

合同:覆盖此方法时, 必须致电setMeasuredDimension(int, int)来存储此视图的测量宽度和高度。 如果不这样做,将触发IllegalStateException ,由measure(int, int)引发。 调用超类' onMeasure(int, int)是一种有效的用法。

Measure的基类实现默认为背景大小,除非MeasureSpec允许更大的大小。 子类应该覆盖onMeasure(int, int)以提供更好的内容度量。

如果此方法被覆盖,则子类的责任是确保测量的高度和宽度至少为视图的最小高度和宽度( getSuggestedMinimumHeight()getSuggestedMinimumWidth() )。

Parameters
widthMeasureSpec int: horizontal space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec.
heightMeasureSpec int: vertical space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec.

onWindowVisibilityChanged

Added in API level 1
void onWindowVisibilityChanged (int visibility)

叫当包含窗口具有改变其可见性(间GONEINVISIBLE ,和VISIBLE )。 请注意,这会告诉您窗口管理器是否使您的窗口可见; 这并不能告诉你你的窗口是否被屏幕上的其他窗口遮挡,即使它本身是可见的。

Parameters
visibility int: The new visibility of the window.

Hooray!