Most visited

Recently visited

Added in API level 1

SurfaceHolder

public interface SurfaceHolder

android.view.SurfaceHolder


有人拿着展示面的抽象界面。 允许您控制曲面大小和格式,编辑曲面中的像素以及监视曲面的变化。 该接口通常可通过SurfaceView类获得。

当从运行 SurfaceView的线程使用此接口时,您需要仔细阅读方法 lockCanvas()Callback.surfaceCreated()

Summary

Nested classes

class SurfaceHolder.BadSurfaceTypeException

在类型为SURFACE_TYPE_PUSH_BUFFERS的Surface上lockCanvas()时从lockCanvas()引发的异常。

interface SurfaceHolder.Callback

客户可以实现这个接口来接收关于表面变化的信息。

interface SurfaceHolder.Callback2

额外的回调,可以收到SurfaceHolder.Callback

Constants

int SURFACE_TYPE_GPU

此常数在API级别5中已弃用。此值被忽略,此值在需要时自动设置。

int SURFACE_TYPE_HARDWARE

此常数在API级别5中已弃用。此值被忽略,此值在需要时自动设置。

int SURFACE_TYPE_NORMAL

此常数在API级别11中已被弃用。这被忽略,此值在需要时自动设置。

int SURFACE_TYPE_PUSH_BUFFERS

此常数在API级别11中已被弃用。这被忽略,此值在需要时自动设置。

Public methods

abstract void addCallback(SurfaceHolder.Callback callback)

为此持有者添加回调界面。

abstract Surface getSurface()

直接访问表面对象。

abstract Rect getSurfaceFrame()

检索曲面的当前大小。

abstract boolean isCreating()

使用此方法来查明表面是否处于从回调方法创建的过程中。

abstract Canvas lockCanvas()

开始编辑曲面中的像素。

abstract Canvas lockCanvas(Rect dirty)

就像 lockCanvas()但允许指定一个脏矩形。

abstract void removeCallback(SurfaceHolder.Callback callback)

从此持有者中删除以前添加的回拨界面。

abstract void setFixedSize(int width, int height)

使表面具有固定的大小。

abstract void setFormat(int format)

设置表面的所需PixelFormat。

abstract void setKeepScreenOn(boolean screenOn)

启用或禁用选项以在显示此表面时保持屏幕打开。

abstract void setSizeFromLayout()

允许表面根据其容器的布局调整大小(这是默认设置)。

abstract void setType(int type)

此方法在API级别11中已被弃用。这被忽略,此值在需要时自动设置。

abstract void unlockCanvasAndPost(Canvas canvas)

完成编辑表面中的像素。

Constants

SURFACE_TYPE_GPU

Added in API level 1
int SURFACE_TYPE_GPU

此常数在API级别5中已弃用。
这被忽略,这个值在需要时自动设置。

常量值:2(0x00000002)

SURFACE_TYPE_HARDWARE

Added in API level 1
int SURFACE_TYPE_HARDWARE

This constant was deprecated in API level 5.
this is ignored, this value is set automatically when needed.

常数值:1(0x00000001)

SURFACE_TYPE_NORMAL

Added in API level 1
int SURFACE_TYPE_NORMAL

This constant was deprecated in API level 11.
this is ignored, this value is set automatically when needed.

常量值:0(0x00000000)

SURFACE_TYPE_PUSH_BUFFERS

Added in API level 1
int SURFACE_TYPE_PUSH_BUFFERS

此常数在API级别11中已弃用。
这被忽略,这个值在需要时自动设置。

常量值:3(0x00000003)

Public methods

addCallback

Added in API level 1
void addCallback (SurfaceHolder.Callback callback)

为此持有者添加回调界面。 可以有多个与持有者关联的Callback接口。

Parameters
callback SurfaceHolder.Callback: The new Callback interface.

getSurface

Added in API level 1
Surface getSurface ()

直接访问表面对象。 Surface可能并不总是可用 - 例如,当使用SurfaceView ,只有在视图已附加到窗口管理器并执行布局以确定Surface的尺寸和屏幕位置之前,持有者的Surface才会创建。 因此,您通常需要实施Callback.surfaceCreated以了解Surface何时可供使用。

请注意,如果您直接从另一个线程访问Surface,则正确实施 Callback.surfaceCreatedCallback.surfaceDestroyed以确保线程在其有效时才访问Surface并且线程正在使用Surface时不会被破坏,这一点至关重要。

此方法旨在供常常需要直接访问Surface对象(通常将其传递给本机代码)的框架使用。

Returns
Surface Surface The surface.

getSurfaceFrame

Added in API level 1
Rect getSurfaceFrame ()

检索曲面的当前大小。 注意:不要修改返回的Rect。 这只能从SurfaceView的窗口或lockCanvas()内部lockCanvas()

Returns
Rect Rect The surface's dimensions. The left and top are always 0.

isCreating

Added in API level 1
boolean isCreating ()

使用此方法来查明表面是否处于从回调方法创建的过程中。 这是为了与surfaceChanged(SurfaceHolder, int, int, int)一起使用。

Returns
boolean true if the surface is in the process of being created.

lockCanvas

Added in API level 1
Canvas lockCanvas ()

开始编辑曲面中的像素。 返回的Canvas可以用来绘制表面的位图。 如果曲面尚未创建或者无法编辑,则返回null。 您通常需要实施Callback.surfaceCreated以了解Surface何时可供使用。

Surface的内容永远不会保留在unlockCanvas()和lockCanvas()之间,因此,必须写入Surface区域内的每个像素。 这条规则的唯一例外是指定了一个脏矩形,在这种情况下,将保留非脏像素。

如果您在Surface未准备好( Callback.surfaceCreated之前或 Callback.surfaceDestroyed之前)时重复调用此 Callback.surfaceDestroyed ,您的呼叫将被抑制到较慢的速率以避免消耗CPU。

如果null没有被返回,这个函数在内部持有一个锁,直到对应的unlockCanvasAndPost(Canvas)调用,阻止SurfaceViewSurfaceView时创建,销毁或修改表面。 这比直接访问Surface更方便,因为您不需要使用Callback.surfaceDestroyed的绘图线程进行特殊同步。

Returns
Canvas Canvas Use to draw into the surface.

lockCanvas

Added in API level 1
Canvas lockCanvas (Rect dirty)

就像lockCanvas()但允许指定一个脏矩形。 该矩形内的每个像素都必须写入; 然而,在下一次调用lockCanvas()时,脏矩形外部的像素将被保留。

Parameters
dirty Rect: Area of the Surface that will be modified.
Returns
Canvas Canvas Use to draw into the surface.

也可以看看:

removeCallback

Added in API level 1
void removeCallback (SurfaceHolder.Callback callback)

从此持有者中删除以前添加的回拨界面。

Parameters
callback SurfaceHolder.Callback: The Callback interface to remove.

setFixedSize

Added in API level 1
void setFixedSize (int width, 
                int height)

使表面具有固定的大小。 它不会从这个尺寸改变。 使用SurfaceView ,必须从运行SurfaceView窗口的相同线程中调用。

Parameters
width int: The surface's width.
height int: The surface's height.

setFormat

Added in API level 1
void setFormat (int format)

设置表面的所需PixelFormat。 默认值是OPAQUE。 使用SurfaceView ,必须从运行SurfaceView窗口的相同线程中调用。

Parameters
format int: A constant from PixelFormat.

也可以看看:

setKeepScreenOn

Added in API level 1
void setKeepScreenOn (boolean screenOn)

启用或禁用选项以在显示此表面时保持屏幕打开。 默认值为false,允许关闭。 这是安全的从任何线程调用。

Parameters
screenOn boolean: Set to true to force the screen to stay on, false to allow it to turn off.

setSizeFromLayout

Added in API level 1
void setSizeFromLayout ()

允许表面根据其容器的布局调整大小(这是默认设置)。 启用此功能后,您应该监控surfaceChanged(SurfaceHolder, int, int, int)以了解表面大小的变化。 使用SurfaceView ,必须从运行SurfaceView窗口的相同线程中调用。

setType

Added in API level 1
void setType (int type)

此方法在API级别11中已弃用。
这被忽略,这个值在需要时自动设置。

设置曲面的类型。

Parameters
type int

unlockCanvasAndPost

Added in API level 1
void unlockCanvasAndPost (Canvas canvas)

完成编辑表面中的像素。 在此调用之后,表面的当前像素将显示在屏幕上,但其内容会丢失,特别是当再次调用lockCanvas()时,不能保证Surface的内容保持不变。

Parameters
canvas Canvas: The Canvas previously returned by lockCanvas().

也可以看看:

Hooray!