public interface SurfaceHolder
android.view.SurfaceHolder |
有人拿着展示面的抽象界面。 允许您控制曲面大小和格式,编辑曲面中的像素以及监视曲面的变化。 该接口通常可通过SurfaceView
类获得。
当从运行 SurfaceView
的线程使用此接口时,您需要仔细阅读方法 lockCanvas()
和 Callback.surfaceCreated()
。
Nested classes |
|
---|---|
class |
SurfaceHolder.BadSurfaceTypeException 在类型为SURFACE_TYPE_PUSH_BUFFERS的Surface上 |
interface |
SurfaceHolder.Callback 客户可以实现这个接口来接收关于表面变化的信息。 |
interface |
SurfaceHolder.Callback2 额外的回调,可以收到 |
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) 就像 |
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) 完成编辑表面中的像素。 |
int SURFACE_TYPE_GPU
此常数在API级别5中已弃用。
这被忽略,这个值在需要时自动设置。
常量值:2(0x00000002)
int SURFACE_TYPE_HARDWARE
This constant was deprecated in API level 5.
this is ignored, this value is set automatically when needed.
常数值:1(0x00000001)
int SURFACE_TYPE_NORMAL
This constant was deprecated in API level 11.
this is ignored, this value is set automatically when needed.
常量值:0(0x00000000)
int SURFACE_TYPE_PUSH_BUFFERS
此常数在API级别11中已弃用。
这被忽略,这个值在需要时自动设置。
常量值:3(0x00000003)
void addCallback (SurfaceHolder.Callback callback)
为此持有者添加回调界面。 可以有多个与持有者关联的Callback接口。
Parameters | |
---|---|
callback |
SurfaceHolder.Callback : The new Callback interface. |
Surface getSurface ()
直接访问表面对象。 Surface可能并不总是可用 - 例如,当使用SurfaceView
,只有在视图已附加到窗口管理器并执行布局以确定Surface的尺寸和屏幕位置之前,持有者的Surface才会创建。 因此,您通常需要实施Callback.surfaceCreated
以了解Surface何时可供使用。
请注意,如果您直接从另一个线程访问Surface,则正确实施 Callback.surfaceCreated
和 Callback.surfaceDestroyed
以确保线程在其有效时才访问Surface并且线程正在使用Surface时不会被破坏,这一点至关重要。
此方法旨在供常常需要直接访问Surface对象(通常将其传递给本机代码)的框架使用。
Returns | |
---|---|
Surface |
Surface The surface. |
Rect getSurfaceFrame ()
检索曲面的当前大小。 注意:不要修改返回的Rect。 这只能从SurfaceView
的窗口或lockCanvas()
内部lockCanvas()
。
Returns | |
---|---|
Rect |
Rect The surface's dimensions. The left and top are always 0. |
boolean isCreating ()
使用此方法来查明表面是否处于从回调方法创建的过程中。 这是为了与surfaceChanged(SurfaceHolder, int, int, int)
一起使用。
Returns | |
---|---|
boolean |
true if the surface is in the process of being created. |
Canvas lockCanvas ()
开始编辑曲面中的像素。 返回的Canvas可以用来绘制表面的位图。 如果曲面尚未创建或者无法编辑,则返回null。 您通常需要实施Callback.surfaceCreated
以了解Surface何时可供使用。
Surface的内容永远不会保留在unlockCanvas()和lockCanvas()之间,因此,必须写入Surface区域内的每个像素。 这条规则的唯一例外是指定了一个脏矩形,在这种情况下,将保留非脏像素。
如果您在Surface未准备好( Callback.surfaceCreated
之前或 Callback.surfaceDestroyed
之前)时重复调用此 Callback.surfaceDestroyed
,您的呼叫将被抑制到较慢的速率以避免消耗CPU。
如果null没有被返回,这个函数在内部持有一个锁,直到对应的unlockCanvasAndPost(Canvas)
调用,阻止SurfaceView
在SurfaceView
时创建,销毁或修改表面。 这比直接访问Surface更方便,因为您不需要使用Callback.surfaceDestroyed
的绘图线程进行特殊同步。
Returns | |
---|---|
Canvas |
Canvas Use to draw into the surface. |
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. |
也可以看看:
void removeCallback (SurfaceHolder.Callback callback)
从此持有者中删除以前添加的回拨界面。
Parameters | |
---|---|
callback |
SurfaceHolder.Callback : The Callback interface to remove. |
void setFixedSize (int width, int height)
使表面具有固定的大小。 它不会从这个尺寸改变。 使用SurfaceView
,必须从运行SurfaceView窗口的相同线程中调用。
Parameters | |
---|---|
width |
int : The surface's width. |
height |
int : The surface's height. |
void setFormat (int format)
设置表面的所需PixelFormat。 默认值是OPAQUE。 使用SurfaceView
,必须从运行SurfaceView窗口的相同线程中调用。
Parameters | |
---|---|
format |
int : A constant from PixelFormat. |
也可以看看:
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. |
void setSizeFromLayout ()
允许表面根据其容器的布局调整大小(这是默认设置)。 启用此功能后,您应该监控surfaceChanged(SurfaceHolder, int, int, int)
以了解表面大小的变化。 使用SurfaceView
,必须从运行SurfaceView窗口的相同线程中调用。
void setType (int type)
此方法在API级别11中已弃用。
这被忽略,这个值在需要时自动设置。
设置曲面的类型。
Parameters | |
---|---|
type |
int
|
void unlockCanvasAndPost (Canvas canvas)
完成编辑表面中的像素。 在此调用之后,表面的当前像素将显示在屏幕上,但其内容会丢失,特别是当再次调用lockCanvas()时,不能保证Surface的内容保持不变。
Parameters | |
---|---|
canvas |
Canvas : The Canvas previously returned by lockCanvas(). |
也可以看看: