展会信息港展会大全

android学习日记06--游戏开发之SurfaceView框架
来源:互联网   发布日期:2015-10-03 15:16:14   浏览:2155次  

导读:用SurfaceView实现上篇View框架一样的例子讲解写在注释里复制代码 1 package com.example.gamesurfaceview2; 2 3 ...

用SurfaceView实现上篇View框架一样的例子

讲解写在注释里

复制代码

1 package com.example.gamesurfaceview2;

2

3 import android.content.Context;

4 import android.graphics.Canvas;

5 import android.graphics.Color;

6 import android.graphics.Paint;

7 import android.view.MotionEvent;

8 import android.view.SurfaceHolder;

9 import android.view.SurfaceHolder.Callback;

10 import android.view.SurfaceView;

11

12 //SurfaceView 还要继承CallBack接口

13 public class MySurfaceView extends SurfaceView implements Callback,Runnable{

14

15private SurfaceHolder sfh;

16private Paint paint;

17private int x,y;

18private Thread thread;

19private boolean flag;

20private Canvas canvas;

21private int w,h;

22

23public MySurfaceView(Context context) {

24super(context);

25// TODO Auto-generated constructor stub

26//通过SurfaceHolder来和Can打交道

27sfh = this.getHolder();

28//添加监听

29sfh.addCallback(this);

30x =20;

31y =20;

32paint = new Paint();

33paint.setColor(Color.WHITE);

34setFocusable(true);

35}

36

37@Override

38/**

39* surfaceView发生改变时执行的方法

40*/

41public void surfaceChanged(SurfaceHolder holder, int format, int width,

42int height) {

43// TODO Auto-generated method stub

44

45}

46

47@Override

48/**

49* surfaceView创建时执行的方法

50*/

51public void surfaceCreated(SurfaceHolder holder) {

52// TODO Auto-generated method stub

53h = this.getHeight();

54w = this.getWidth();

55flag = true;

56thread = new Thread(this);

57thread.start();

58}

59

60/**

61* 自己定义的绘画调用方法

62*/

63private void Mydraw() {

64try {

65// 获取一个加锁的画布,防止被其他修改

66canvas = sfh.lockCanvas();

67if (canvas != null) {

68//-----------利用填充矩形的方式,刷屏

69////绘制矩形

70//canvas.drawRect(0,0,this.getWidth(),

71//this.getHeight(), paint);

72//-----------利用填充画布,刷屏

73//canvas.drawColor(Color.BLACK);

74//-----------利用填充画布指定的颜色分量,刷屏

75// 没重画图像会叠在一起

76canvas.drawRGB(0, 0, 0);

77canvas.drawText("Game", x, y, paint);

78}

79} catch (Exception e) {

80// TODO: handle exception

81} finally {

82if (canvas != null)

83// 解锁和提交画布

84sfh.unlockCanvasAndPost(canvas);

85}

86}

87

88@Override

89/**

90* surfaceView被销毁时执行的方法

91*/

92public void surfaceDestroyed(SurfaceHolder holder) {

93// TODO Auto-generated method stub

94

95}

96

97

98@Override

99/**

100* 触摸屏幕事件

101*/

102public boolean onTouchEvent(MotionEvent event) {

103// TODO Auto-generated method stub

104x= (int) event.getX();

105y= (int) event.getY();

106return true;

107}

108

109

110/**

111* 游戏逻辑

112*/

113private void logic() {

114

115}

116@Override

117public void run() {

118while (flag) {

119long start = System.currentTimeMillis();

120Mydraw();

121logic();

122long end = System.currentTimeMillis();

123try {

124// 50毫秒刷新一次

125if (end - start < 50) {

126Thread.sleep(50 - (end - start));

127}

128} catch (InterruptedException e) {

129e.printStackTrace();

130}

131}

132}

133

134

135 }

赞助本站

人工智能实验室

相关热词: android开发 教程

相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港