`
一口三个汉堡
  • 浏览: 115307 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

实例3--使用surfaceView

阅读更多

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

效果图:




下面给出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 stub
		setFocusable(true);
		getHolder().addCallback(this);
		holder = this.getHolder();
		
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(isGame)
		{
			input();
			logic();
			doDraw();
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.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 block
				e.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);
	}
	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		start();
		
	}
	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		stop();
		
	}
	
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		this.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

  • 大小: 5.3 KB
  • 大小: 5.1 KB
0
0
分享到:
评论
2 楼 一口三个汉堡 2011-05-31  
zhang247124629 写道
surfaceDestroyed方法中没有必要调用stop().因为来电时.系统会调用surfaceDestroyed(),当结束通话后.系统会重新调用surfaceCreate()方法的.所以没有必要把线程给终止.

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

相关推荐

    surfaceView实例 4-10

    Sample3_7:这是一个实际的项目样本,可能包含一个使用SurfaceView实现特定功能的示例,例如游戏中的角色移动、粒子效果或者自定义的视频播放控件。 通过以上各个章节的学习,你将全面掌握SurfaceView的使用,能够...

    JavaScript应用实例-surfaceView(简单示例).js

    JavaScript应用实例-surfaceView(简单示例).js

    SurfaceView-Sample-master.zip_android_surfaceview

    "说明.txt"可能详细介绍了如何使用这个示例代码以及其中的关键概念,而"SurfaceView-Sample-master"很可能是项目源码,包含了具体的SurfaceView使用示例。 源码分析: - `MainActivity.java`:通常这里是应用的主...

    Android游戏开发学习(2)--SurfaceView实例控制角色移动

    本篇将详细讲解如何使用SurfaceView来实例控制角色移动。 首先,我们了解SurfaceView的基本概念。SurfaceView是Android系统提供的一个特殊的View,它拥有自己的独立绘制表面,可以与主线程分离,从而在单独的线程中...

    SurfaceView实例源代码

    本实例源代码将深入探讨如何使用SurfaceView来自定义控件,实现一个简单的demo。 首先,SurfaceView的核心在于它的SurfaceHolder接口,它是SurfaceView与Surface之间的桥梁,提供了创建、配置和控制Surface的方法。...

    SurfaceView实例

    在SurfaceView的实例中,我们首先需要理解它的两种工作模式:`SurfaceHolder.Callback`和`SurfaceView`的子类。`SurfaceHolder.Callback`是接口,用于监听Surface的创建、改变和销毁事件,开发者通常会在这些回调中...

    SurfaceView应用实例动态小鱼

    本实例“SurfaceView应用实例动态小鱼”是为了帮助新手理解SurfaceView的使用方法和绘图机制。 首先,SurfaceView的核心特性在于它有自己的独立渲染表面,这个表面不在主线程的视图层次中,而是位于一个单独的硬件...

    SurfaceView使用示例

    2. 在Activity或Fragment中找到并初始化SurfaceView实例。 ```java SurfaceView surfaceView = findViewById(R.id.my_surface_view); SurfaceHolder holder = surfaceView.getHolder(); ``` SurfaceHolder是...

    surfaceView控件资料

    3. 使用SurfaceView的步骤: - 在布局文件中添加SurfaceView元素。 - 初始化SurfaceView,并获取SurfaceHolder实例。 - 实现SurfaceHolder.Callback接口,处理Surface的生命周期事件。 - 创建MediaPlayer对象,...

    本示例使用 SurfaceView 播放视频

    然后,通过SurfaceView的getHolder()方法获取SurfaceHolder实例,设置回调监听Surface的状态变化。 5. **初始化MediaPlayer** 初始化MediaPlayer时,需要指定视频文件的路径或URL。调用setDataSource()方法加载...

    Android SurfaceView使用Demo

    **Android SurfaceView 使用详解** `SurfaceView` 是 Android 系统提供的一种特殊的视图组件,它允许开发者在应用程序中创建高性能的图形界面,比如游戏、视频播放器等需要连续更新图像的应用。`SurfaceView` 提供...

    最简单的surfaceview画图和截图

    SurfaceView是Android系统提供...综上所述,这个项目涵盖了SurfaceView的基本使用,包括创建、绘制以及截图等关键步骤,同时也涉及到Bitmap操作和用户交互,是一个很好的学习和实践Android图形处理和自定义视图的实例。

    安卓动画效果相关-Android使用SurfaceView实现墨迹天气的风车效果.zip

    这个压缩包"安卓动画效果相关-Android使用SurfaceView实现墨迹天气的风车效果.zip"主要包含了一个使用SurfaceView来实现类似墨迹天气应用中的风车旋转动画的示例。SurfaceView是Android系统提供的一种特殊视图,它...

    AndroidApp中使用SurfaceView制作多线程动画的实例讲解.docx

    ### Android App中使用SurfaceView制作多线程动画的实例讲解 #### SurfaceView的定义与应用场景 在Android开发中,为了确保应用的流畅性和响应性,通常需要将耗时操作(如网络请求)放在非UI线程中进行。然而,...

    Android应用小实例--跟随手指的小球 .

    如果需要实现更复杂的动画效果,可能需要使用`SurfaceView`,因为它提供了底层的绘图能力,更适合高帧率的实时渲染。 其次,为了实现小球跟随手指移动的效果,我们需要监听用户的触摸事件。Android中的事件处理主要...

    SurfaceView

    文件名`szt_SurfaceView`可能包含的是一个关于SurfaceView使用示例的代码或文档,通过学习和分析这个例子,可以更好地理解和掌握SurfaceView在实际项目中的运用。 总之,SurfaceView是Android游戏开发中的重要工具...

    SurfaceView画图

    3. **渲染线程**:SurfaceView可以创建一个新的线程,专门用于在Surface上进行绘图,这样不会影响主线程的执行,提高了应用程序的流畅性。 SurfaceView的主要类和接口: 1. **SurfaceHolder**:SurfaceView的嵌套类...

    使用SurfaceView实现安卓摇杆

    本文将深入探讨如何使用`SurfaceView`来实现一个安卓摇杆,并介绍如何设置监听器来捕获用户的操作。 首先,我们来了解`SurfaceView`的基本概念。`SurfaceView`是一个特殊的视图,它提供了直接访问到Android设备的...

Global site tag (gtag.js) - Google Analytics