在那本书用的是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
分享到:
相关推荐
Sample3_7:这是一个实际的项目样本,可能包含一个使用SurfaceView实现特定功能的示例,例如游戏中的角色移动、粒子效果或者自定义的视频播放控件。 通过以上各个章节的学习,你将全面掌握SurfaceView的使用,能够...
JavaScript应用实例-surfaceView(简单示例).js
"说明.txt"可能详细介绍了如何使用这个示例代码以及其中的关键概念,而"SurfaceView-Sample-master"很可能是项目源码,包含了具体的SurfaceView使用示例。 源码分析: - `MainActivity.java`:通常这里是应用的主...
本篇将详细讲解如何使用SurfaceView来实例控制角色移动。 首先,我们了解SurfaceView的基本概念。SurfaceView是Android系统提供的一个特殊的View,它拥有自己的独立绘制表面,可以与主线程分离,从而在单独的线程中...
本实例源代码将深入探讨如何使用SurfaceView来自定义控件,实现一个简单的demo。 首先,SurfaceView的核心在于它的SurfaceHolder接口,它是SurfaceView与Surface之间的桥梁,提供了创建、配置和控制Surface的方法。...
在SurfaceView的实例中,我们首先需要理解它的两种工作模式:`SurfaceHolder.Callback`和`SurfaceView`的子类。`SurfaceHolder.Callback`是接口,用于监听Surface的创建、改变和销毁事件,开发者通常会在这些回调中...
本实例“SurfaceView应用实例动态小鱼”是为了帮助新手理解SurfaceView的使用方法和绘图机制。 首先,SurfaceView的核心特性在于它有自己的独立渲染表面,这个表面不在主线程的视图层次中,而是位于一个单独的硬件...
2. 在Activity或Fragment中找到并初始化SurfaceView实例。 ```java SurfaceView surfaceView = findViewById(R.id.my_surface_view); SurfaceHolder holder = surfaceView.getHolder(); ``` SurfaceHolder是...
3. 使用SurfaceView的步骤: - 在布局文件中添加SurfaceView元素。 - 初始化SurfaceView,并获取SurfaceHolder实例。 - 实现SurfaceHolder.Callback接口,处理Surface的生命周期事件。 - 创建MediaPlayer对象,...
然后,通过SurfaceView的getHolder()方法获取SurfaceHolder实例,设置回调监听Surface的状态变化。 5. **初始化MediaPlayer** 初始化MediaPlayer时,需要指定视频文件的路径或URL。调用setDataSource()方法加载...
**Android SurfaceView 使用详解** `SurfaceView` 是 Android 系统提供的一种特殊的视图组件,它允许开发者在应用程序中创建高性能的图形界面,比如游戏、视频播放器等需要连续更新图像的应用。`SurfaceView` 提供...
SurfaceView是Android系统提供...综上所述,这个项目涵盖了SurfaceView的基本使用,包括创建、绘制以及截图等关键步骤,同时也涉及到Bitmap操作和用户交互,是一个很好的学习和实践Android图形处理和自定义视图的实例。
这个压缩包"安卓动画效果相关-Android使用SurfaceView实现墨迹天气的风车效果.zip"主要包含了一个使用SurfaceView来实现类似墨迹天气应用中的风车旋转动画的示例。SurfaceView是Android系统提供的一种特殊视图,它...
### Android App中使用SurfaceView制作多线程动画的实例讲解 #### SurfaceView的定义与应用场景 在Android开发中,为了确保应用的流畅性和响应性,通常需要将耗时操作(如网络请求)放在非UI线程中进行。然而,...
如果需要实现更复杂的动画效果,可能需要使用`SurfaceView`,因为它提供了底层的绘图能力,更适合高帧率的实时渲染。 其次,为了实现小球跟随手指移动的效果,我们需要监听用户的触摸事件。Android中的事件处理主要...
文件名`szt_SurfaceView`可能包含的是一个关于SurfaceView使用示例的代码或文档,通过学习和分析这个例子,可以更好地理解和掌握SurfaceView在实际项目中的运用。 总之,SurfaceView是Android游戏开发中的重要工具...
3. **渲染线程**:SurfaceView可以创建一个新的线程,专门用于在Surface上进行绘图,这样不会影响主线程的执行,提高了应用程序的流畅性。 SurfaceView的主要类和接口: 1. **SurfaceHolder**:SurfaceView的嵌套类...
本文将深入探讨如何使用`SurfaceView`来实现一个安卓摇杆,并介绍如何设置监听器来捕获用户的操作。 首先,我们来了解`SurfaceView`的基本概念。`SurfaceView`是一个特殊的视图,它提供了直接访问到Android设备的...