码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-05-13 22:04:38      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:surface   android   

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方法之前结束绘制。

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

标签:surface   android   

原文地址:http://blog.csdn.net/lpjishu/article/details/45696629

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!