Android中SurfaceView的使用示例

SurfaceView在游戏开发中有着举足轻重的地位,它对于画面的控制有着更大的自由度(不像View要用handler来更新,关于View的),但这方面的参考资料并不是太多,能找到的例子都有点喧宾夺主的感觉,不能把使用的流程清晰展示出来,下面是个简单的示例,力求把流程清楚展示,其他的可简则简。

程序效果:用线程画一个蓝色的长方形。

Java代码
  1. packagecom.ray.test;
  2. /*
  3. *SurfaceView的示例程序
  4. *演示其流程
  5. */
  6. importandroid.app.Activity;
  7. importandroid.content.Context;
  8. importandroid.graphics.Canvas;
  9. importandroid.graphics.Color;
  10. importandroid.graphics.Paint;
  11. importandroid.graphics.RectF;
  12. importandroid.os.Bundle;
  13. importandroid.view.SurfaceHolder;
  14. importandroid.view.SurfaceView;
  15. publicclassTestextendsActivity{
  16. publicvoidonCreate(BundlesavedInstanceState){
  17. super.onCreate(savedInstanceState);
  18. setContentView(newMyView(this));
  19. }
  20. //内部类
  21. classMyViewextendsSurfaceViewimplementsSurfaceHolder.Callback{
  22. SurfaceHolderholder;
  23. publicMyView(Contextcontext){
  24. super(context);
  25. holder=this.getHolder();//获取holder
  26. holder.addCallback(this);
  27. //setFocusable(true);
  28. }
  29. @Override
  30. publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
  31. intheight){
  32. }
  33. @Override
  34. publicvoidsurfaceCreated(SurfaceHolderholder){
  35. newThread(newMyThread()).start();
  36. }
  37. @Override
  38. publicvoidsurfaceDestroyed(SurfaceHolderholder){
  39. }
  40. //内部类的内部类
  41. classMyThreadimplementsRunnable{
  42. @Override
  43. publicvoidrun(){
  44. Canvascanvas=holder.lockCanvas(null);//获取画布
  45. PaintmPaint=newPaint();
  46. mPaint.setColor(Color.BLUE);
  47. canvas.drawRect(newRectF(40,60,80,80),mPaint);
  48. holder.unlockCanvasAndPost(canvas);//解锁画布,提交画好的图像
  49. }
  50. }
  51. }
  52. }

你可能感兴趣的:(SurfaceView)