Android SurfaceView学习示范

Android SurfaceView学习示例?View,是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有

Android SurfaceView学习示例

?

View,是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。

在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要。在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等。?

游戏的核心是不断地绘图和刷新界面,Android中提供了 invalidate 方法来实现界面刷新。注意,invalidate 不能直接在线程中调用, 就是不可以在子线程中调用,因此它违背了 Android的单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI 线程中执行,因此Android中最常用的方法就是利用Handler来实现UI线程的更新。 其实用 AsyncTask 也可以。

?

具体示例:

Activity:

?

[java]?view plaincopyprint?
  1. public?class?Activity01?extends?Activity?{??
  2. ??????
  3. ????private?static?final?String?TAG?=?"mThread";??
  4. ????private?static?final?int?REFRESH?=?0x000001;??
  5. ????private?GameView?mGameView?=?null;??
  6. ??
  7. ????@Override??
  8. ????public?void?onCreate(Bundle?savedInstanceState)?{??
  9. ????????super.onCreate(savedInstanceState);??
  10. ??????????
  11. ????????this.mGameView?=?new?GameView(this);??
  12. ????????mGameView.x?=?320.0f;??
  13. ????????mGameView.y?=?120.0f;??
  14. ????????setContentView(mGameView);??
  15. ??????????
  16. ????????new?Thread(new?GameThread()).start();??
  17. ????}??
  18. ??
  19. ????Handler?myHandler?=?new?Handler()?{??
  20. ??????????
  21. ????????@Override??
  22. ????????public?void?handleMessage(Message?msg)?{??
  23. ??
  24. ????????????switch?(msg.what)?{??
  25. ????????????case?Activity01.REFRESH:??
  26. ????????????????mGameView.invalidate();?????//?repaint?View??
  27. ????????????????break;??
  28. ????????????}??
  29. ????????????super.handleMessage(msg);??
  30. ????????}??
  31. ????};??
  32. ??????
  33. ????class?GameThread?implements?Runnable?{??
  34. ??????????
  35. ????????@Override??
  36. ????????public?void?run()?{??
  37. ????????????while?(!Thread.currentThread().isInterrupted())?{??
  38. ????????????????Message?message?=?new?Message();??
  39. ????????????????message.what?=?Activity01.REFRESH;??
  40. ??????????????????
  41. ????????????????Activity01.this.myHandler.sendMessage(message);??
  42. ????????????????try?{??
  43. ????????????????????Thread.sleep(1000);??
  44. ????????????????}?catch?(InterruptedException?e)?{??
  45. ????????????????????Thread.currentThread().interrupt();??
  46. ????????????????}??
  47. ????????????}??
  48. ????????}??
  49. ????}??
  50. ??
  51. ????@Override??
  52. ????public?boolean?onTouchEvent(MotionEvent?event)?{??
  53. ????????if(event.getAction()?==?MotionEvent.ACTION_DOWN){??
  54. ????????????mGameView.x?=?event.getX();??
  55. ????????????mGameView.y?=?event.getY();??
  56. ????????}??
  57. ??????????
  58. ????????return?true;??
  59. ????}??
  60. ??????
  61. ????@Override??
  62. ????public?boolean?onKeyDown(int?keyCode,?KeyEvent?event)?{??
  63. ????????if(keyCode?==?KeyEvent.KEYCODE_BACK){??
  64. ????????????this.finish();??
  65. ????????}??
  66. ??????????
  67. ????????return?true;??
  68. ????}??
  69. }??


gameview

?

?

[java]?view plaincopyprint?
  1. public?class?GameView?extends?View?{??
  2. ????int?count?=?0;??
  3. ????float?x?=?0,?y?=?0;??
  4. ??
  5. ????public?GameView(Context?context)?{??
  6. ????????super(context);??
  7. ????}??
  8. ??
  9. ????public?void?onDraw(Canvas?canvas)?{??
  10. ????????if?(count?<?100)?{??
  11. ????????????count++;??
  12. ????????}?else?{??
  13. ????????????count?=?0;??
  14. ????????}??
  15. ??
  16. ????????Paint?mPaint?=?new?Paint();??
  17. ????????switch?(count?%?4)?{??
  18. ????????case?0:??
  19. ????????????mPaint.setColor(Color.BLUE);??
  20. ????????????break;??
  21. ????????case?1:??
  22. ????????????mPaint.setColor(Color.GREEN);??
  23. ????????????break;??
  24. ????????case?2:??
  25. ????????????mPaint.setColor(Color.RED);??
  26. ????????????break;??
  27. ????????case?3:??
  28. ????????????mPaint.setColor(Color.YELLOW);??
  29. ????????????break;??
  30. ????????default:??
  31. ????????????mPaint.setColor(Color.WHITE);??
  32. ????????????break;??
  33. ????????}??
  34. ??
  35. ????????canvas.drawRect(x?-?40,?y?-?20,?x?+?40,?y?+?20,?mPaint);??
  36. ????}??
  37. }??


运行效果:

?

Android SurfaceView学习示范

?

更多信息请查看?java进阶网?http://www.javady.com