SurfaceView和
View最本质的区别在于,
surfaceView是在一个新起的单独线程中可以重新绘制画面而
View必须在
UI的主线程中更新画面。因而,在绘制与更新画面的游戏当中,经常使用
SurfaceView而不是
View。
在游戏中,一个单独的 thread不停的重绘主角与背景的状态,避免阻塞 main UI thread。
Android中的 SurfaceView类就是双缓冲机制。因此,开发游戏时尽量使用 SurfaceView而不要使用 View。
SurfaceView可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了 SurfaceHolder类,使用 getHolder方法获取,相关的有 Canvas lockCanvas()
Canvas lockCanvas(Rect dirty) 、 void removeCallback(SurfaceHolder.Callback callback)、 void unlockCanvasAndPost(Canvas canvas) 控制图形以及绘制,而在 SurfaceHolder.Callback 接口回调中可以通过重写下面方法实现。
使用的 SurfaceView的时候,一般情况下要对其进行创建,销毁,改变时的情况进行监视,这就要用到 SurfaceHolder.Callback.
class XxxView extends SurfaceView implements SurfaceHolder.Callback {
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){}
// 看其名知其义,在surface 的大小发生改变时激发
public void surfaceCreated(SurfaceHolder holder){}
// 同上,在创建时激发,一般在这里调用画图的线程。
public void surfaceDestroyed(SurfaceHolder holder) {}
// 同上,销毁时激发,一般在这里将画图的线程停止、释放。
}
在游戏中,一个单独的 thread不停的重绘主角与背景的状态,避免阻塞 main UI thread。
Android中的 SurfaceView类就是双缓冲机制。因此,开发游戏时尽量使用 SurfaceView而不要使用 View。
SurfaceView可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了 SurfaceHolder类,使用 getHolder方法获取,相关的有 Canvas lockCanvas()
Canvas lockCanvas(Rect dirty) 、 void removeCallback(SurfaceHolder.Callback callback)、 void unlockCanvasAndPost(Canvas canvas) 控制图形以及绘制,而在 SurfaceHolder.Callback 接口回调中可以通过重写下面方法实现。
使用的 SurfaceView的时候,一般情况下要对其进行创建,销毁,改变时的情况进行监视,这就要用到 SurfaceHolder.Callback.
class XxxView extends SurfaceView implements SurfaceHolder.Callback {
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){}
// 看其名知其义,在surface 的大小发生改变时激发
public void surfaceCreated(SurfaceHolder holder){}
// 同上,在创建时激发,一般在这里调用画图的线程。
public void surfaceDestroyed(SurfaceHolder holder) {}
// 同上,销毁时激发,一般在这里将画图的线程停止、释放。
}