首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android SurfaceView运用详解

2012-09-27 
Android SurfaceView使用详解1. SurfaceView的定义前面已经介绍过View了,下面来简单介绍一下SurfaceView,

Android SurfaceView使用详解

1. SurfaceView的定义
前面已经介绍过View了,下面来简单介绍一下SurfaceView,参考SDK文档和网络资料:SurfaceView是View的子类,它内嵌了一个专门用于绘制的Surface,你可以控制这个Surface的格式和尺寸,Surfaceview控制这个Surface的绘制位置。surface是纵深排序(Z-ordered)的,说明它总在自己所在窗口的后面。SurfaceView提供了一个可见区域,只有在这个可见区域内的surface内容才可见。surface的排版显示受到视图层级关系的影响,它的兄弟视图结点会在顶端显示。这意味者 surface的内容会被它的兄弟视图遮挡,这一特性可以用来放置遮盖物(overlays)(例如,文本和按钮等控件)。注意,如果surface上面有透明控件,那么每次surface变化都会引起框架重新计算它和顶层控件的透明效果,这会影响性能。
SurfaceView默认使用双缓冲技术的,它支持在子线程中绘制图像,这样就不会阻塞主线程了,所以它更适合于游戏的开发。

2. SurfaceView的使用
首先继承SurfaceView,并实现SurfaceHolder.Callback接口,实现它的三个方法:surfaceCreated,surfaceChanged,surfaceDestroyed。
surfaceCreated(SurfaceHolder holder):surface创建的时候调用,一般在该方法中启动绘图的线程。
surfaceChanged(SurfaceHolder holder, int format, int width,int height):surface尺寸发生改变的时候调用,如横竖屏切换。
surfaceDestroyed(SurfaceHolder holder) :surface被销毁的时候调用,如退出游戏画面,一般在该方法中停止绘图线程。
还需要获得SurfaceHolder,并添加回调函数,这样这三个方法才会执行。

3. SurfaceView实战
下面通过一个小demo来学习SurfaceView的使用,绘制一个精灵,该精灵有四个方向的行走动画,让精灵沿着屏幕四周不停的行走。游戏中精灵素材和最终实现的效果图:

Android SurfaceView运用详解

Android SurfaceView运用详解

首先创建核心类GameView.java,源码如下:

接下来需要做的是让Activty显示的View为我们之前创建的GameView,然后设置全屏显示。
public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,             WindowManager.LayoutParams.FLAG_FULLSCREEN);     requestWindowFeature(Window.FEATURE_NO_TITLE);     getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,             WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);      DisplayMetrics outMetrics = new DisplayMetrics();     this.getWindowManager().getDefaultDisplay().getMetrics(outMetrics);     GameSurfaceView.SCREEN_WIDTH = outMetrics.widthPixels;     GameSurfaceView.SCREEN_HEIGHT = outMetrics.heightPixels;     GameSurfaceView gameView = new GameSurfaceView(this);     setContentView(gameView); }

现在运行Android工程,应该就可以看到一个手持宝剑的武士在沿着屏幕不停的走了。


转载请注明来自:Alex Zhou,本文链接:http://codingnow.cn/android/603.html


热点排行