您的位置:首页 > 移动开发 > Android开发

Android游戏开发之SurfaceView的使用-android学习之旅(五)

2015-05-13 18:24 597 查看

SurfaceView和View的区别

View是在ui主线程中,直接响应用户的操作,以及任务的分发,但是任务比较复杂会出现阻塞。

SurfaceView则不会出现这种问题,以为它直接从内存等取得图像,更为重要的是,SurfaceView可以通过主线程之外的线程来改变Ui。

使用

对于ui的更新分为主动更新和被动更新,对于被动更新,是通过时间出发控件的更新,频率一般比较低,所以倾向选择View来完成。

对于主动更新,更新频率较快,比如定时器更新画面,一版会采取SurfaceView。

实例代码:

public class MyView extends SurfaceView implements SurfaceHolder.Callback{

public MyView(Context context) {
super(context);
getHolder().addCallback(this);
}
public void draw(){
//锁定画布
Canvas canvas = getHolder().lockCanvas();
//结束之后记得解锁画布
getHolder().unlockCanvasAndPost(canvas);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

}


用SuifaceView绘制简单图形

绘制了一个红色的正方形:

public class MyView extends SurfaceView implements SurfaceHolder.Callback{
private Paint paint = null;
public MyView(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.RED);
getHolder().addCallback(this);
}
public void draw(){
Canvas canvas = getHolder().lockCanvas();
canvas.drawColor(Color.WHITE);
canvas.drawRect(0, 0, 100, 100, paint);
getHolder().unlockCanvasAndPost(canvas);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
draw();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

}


注意一定要在surfaceCreated方法之后开始绘制,一定要在surfaceDestroyed方法之前结束绘制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐