首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

范例3-使用surfaceView

2012-09-04 
实例3--使用surfaceView?在那本书用的是GameCanvas,我就用surfaceView实现了和实例2相同的效果效果图:下面

实例3--使用surfaceView

?在那本书用的是GameCanvas,我就用surfaceView实现了和实例2相同的效果

效果图:


范例3-使用surfaceView
范例3-使用surfaceView

下面给出MainView 的代码

package com.wjh.demon_3;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.KeyEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.SurfaceHolder.Callback;public class MainView extends SurfaceView implements Callback,Runnable{int keyCode = 0;String keyAction = "";Thread gameThread = null;boolean isGame = true;SurfaceHolder holder = null;public MainView(Context context) {super(context);// TODO Auto-generated constructor stubsetFocusable(true);getHolder().addCallback(this);holder = this.getHolder();}@Overridepublic void run() {// TODO Auto-generated method stubwhile(isGame){input();logic();doDraw();try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//开始游戏主线程public void start(){if(gameThread == null){gameThread = new Thread(this);gameThread.start();}}//停止游戏主线程public void stop(){isGame = false;if(gameThread != null){try {gameThread.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//输入判断public void input(){}//逻辑判断public void logic(){}public void doDraw(){Canvas c = null;try{c = holder.lockCanvas();synchronized (holder) {paint(c);}}finally{if(c != null){holder.unlockCanvasAndPost(c);}}}//画图public void paint(Canvas canvas){Paint backGround = new Paint();backGround.setColor(Color.BLACK);//清屏canvas.drawRect(0, 0, getWidth(), getHeight(), backGround);//设置画笔颜色Paint cPaint = new Paint();cPaint.setColor(Color.BLUE);cPaint.setTextSize(20);//输出按键的设备码canvas.drawText("KeyCode:", 10, 20,cPaint);canvas.drawText(""+keyCode,120,20,cPaint);//输出按键的设备名canvas.drawText("KeyAction:", 10, 80, cPaint);canvas.drawText(keyAction, 120, 80, cPaint);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubstart();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubstop();}public boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubthis.keyCode = keyCode;switch(keyCode){case KeyEvent.KEYCODE_DPAD_UP:this.keyAction = "UP";break;case KeyEvent.KEYCODE_DPAD_DOWN:this.keyAction = "DOWN";break;case KeyEvent.KEYCODE_DPAD_LEFT:this.keyAction = "LEFT";break;case KeyEvent.KEYCODE_DPAD_RIGHT:this.keyAction = "RIGHT";break;case KeyEvent.KEYCODE_DPAD_CENTER:this.keyAction = "CENTER";break;default:this.keyAction="NONE";break;}return super.onKeyDown(keyCode, event);}}

apk包(将后缀改为apk):Demon_3.zip

?源文件包:Demon_3.rar

1 楼 zhang247124629 2011-05-31   surfaceDestroyed方法中没有必要调用stop().因为来电时.系统会调用surfaceDestroyed(),当结束通话后.系统会重新调用surfaceCreate()方法的.所以没有必要把线程给终止. 2 楼 一口三个汉堡 2011-05-31   zhang247124629 写道surfaceDestroyed方法中没有必要调用stop().因为来电时.系统会调用surfaceDestroyed(),当结束通话后.系统会重新调用surfaceCreate()方法的.所以没有必要把线程给终止.
我只是想让整个程序看起来有始有终,或许看起来多余。呵呵

热点排行