当前位置:文档之家› 知识共享-Android版贪吃蛇源码及分析(雷惊风)

知识共享-Android版贪吃蛇源码及分析(雷惊风)

知识共享-Android版贪吃蛇源码及分析(雷惊风)
知识共享-Android版贪吃蛇源码及分析(雷惊风)

Android ----snake源码分析

代码结构分析:

Snake :主游戏窗口

SnakeView:游戏视图类,是实现游戏的主体类

TileView :一个处理图片或其它

Coordinate :这是一个包括两个参数,用于记录X轴和Y轴简单类,其中包括一个比较函数.

RefshHandler :用于更新视图

Snake

这个类是游戏的主游戏窗口,是框架容器。

1.游戏的开始:oncreate此外的亮点是:setContentView(https://www.doczj.com/doc/2d4480803.html,yout.snake_layout);设置窗口的

布局文件,这里Android123给大家说明的是,这里的snake_layout使用了自定义资源标签的方式,大家注意学习:这里我们可以看到来自SnakeView这个派生类的名称,由于Android内部的R.资源不包含SnakeView类,所以我们必须写清楚Package,比如com.exmple.android.snake.SnakeView 然后和其他控件使用一样,都是一个id然后宽度、高度、以及自定义的标签tileSize(尾巴长度),如下:

android:id="@+id/snake"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

tileSize="12"

/>

2.onPause:关于这点,大家可以参考下在我blog中关于active生命周期

https://www.doczj.com/doc/2d4480803.html,/admin/blogs/379826

在玩游戏过程中,如果有来电或是其它事件中断,这时应该把当前状态保存。以便返回时,还可以继续玩游戏。这就使用onSaveInstanceState实现保存当前状态。

TileView

注:此部分解析来自: Android示例程序Snake贪食蛇代码分析(三)

TileView,从名称上不难看出这是一个方砖类,就是生成一个方块。 TileView使用了Android平台的显示基类View,View类是直接从https://www.doczj.com/doc/2d4480803.html,ng.Object派生出来的,是各种控件比如 TextView、EditView的基类,当然包括我们的窗口Activity类,这些在SDK文档中都说的比较清楚。

这里定义了 5个int型全局的变量,分别是方砖的数量mTileSize;方砖水平x防线的数量mXTileCount;以及竖直y方向上的方砖数量 mYTileCount,下面是一个相对偏移位置mXOffset和mYOffset;这里android123主让要大家了解如何自定义View在 Android

开发中,在一个View类中主要是重写onSizeChanged方法来控制改变部分,以及onDraw 实现画布的修改,实现的简写如下:

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {} @Override

public void onDraw(Canvas canvas) { super.onDraw(canvas);} 我们自定义的TileView类需要自己添加一个构造方法,根据需要,我们还重载了一种包含样式的方法,这里大家可以多看下Gallery控件的实现,就好理解了,下面是基本框架。public TileView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}

public TileView(Context context, AttributeSet attrs) { super(context, attrs);}

在贪食蛇游戏中我们知道Snake是移动的,所以加入了一个清除显示的clearTiles方法,通过一个二维数组保存一个gird网格型的运动轨迹,下一次我们将会讲解android贪食蛇的游戏逻辑和完整的关联拼接实现。

SnakeView

在这个类中实现的游戏的实体,从游戏需求的角色,这个游戏包括了如下方面:

1.随机产生小苹果,apples这里是复数,当然是是大于1个苹果,所以代码中产生了两个苹果。

2.游戏状态管理

3.画蛇,view的更新

4.吃掉苹果后小蛇状态的变化

5.画围墙

如果实现吃掉苹果小蛇速度变快?

关键是:mMoveDelay这个变量,以下是涉及到这个变量的函数,

每次吃掉苹果后,就会updateSnake一下,里面就把时间处理了:mMoveDelay *= 0.9;

小蛇其实就是一个数组,google的代码就是好注释写的清楚:

/**

*mSnakeTrail:a list of Coordinates that make up the snake's body *mAppleList:the secret location of the juicy apples the snake craves.

*/

private ArrayList mSnakeTrail= new ArrayList(); private ArrayList mAppleList= new ArrayList();

mSnakeTrail:一个由Coordinates列表组织的蛇身.

mAppleList:存放鲜美多汁的苹果列表

通过这个数组画出小蛇不难,问题是如何判断游戏是否结束?

问题是如何判断游戏的状态

所有以下的代码来自updateSnake

1.吃了苹果

// Look for apples

int applecount = mAppleList.size();

for (int appleindex = 0; appleindex < applecount; appleindex++) {

Coordinate c = mAppleList.get(appleindex);

if (c.equals(newHead)) {

mAppleList.remove(c);

addRandomApple();

mScore++;

mMoveDelay *= 0.9;

growSnake = true;

}

}

2.碰到了自己

// Look for collisions with itself

int snakelength = mSnakeTrail.size();

for(int snakeindex = 0; snakeindex < snakelength; snakeindex++) {

Coordinate c = mSnakeTrail.get(snakeindex);

if (c.equals(newHead)) {

setMode(LOSE);

return;

}

}

3.碰到墙了

// Collision detection

// For now we have a 1-square wall around the entire arena

if ((newHead.x < 1) || (newHead.y < 1) || (newHead.x > mXTileCount - 2) || (newHead.y > mYTileCount - 2)) {

setMode(LOSE);

return;

}

源代码分析

Snake状态分析:

在snakeView中定义了snake游戏的几种状态:

private int mMode = READY;

public static final int PAUSE = 0; //暂定

public static final int READY = 1; //准备好了

public static final int RUNNING = 2;//正在运行

public static final int LOSE = 3; //结束,输了游戏

各种游戏状态

rady running

paused lose 以上状态是通过:void setMode(int newMode)函数实现。

如何实现画出小方块:

参看:https://www.doczj.com/doc/2d4480803.html,/blog/206706

public class DrawView extends View {

private final int mTileSize = 12;

private final String TAG="DEMO";

private Paint pa = new Paint();

private Bitmap mTileArray;

void loadImage(){

Resources r = this.getContext().getResources();

Drawable tile = r.getDrawable(R.drawable.redstar);

Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

tile.setBounds(0, 0, mTileSize, mTileSize);

tile.draw(canvas);

mTileArray = bitmap;

}

public DrawView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle);

// TODO Auto-generated constructor stub

loadImage();

x = 10;

y = 10;

Log.i(TAG, "DrawView 2");

}

//如果没有这段代码,大家可以试一下,改用上面的代码,程序能否通过。

public DrawView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

loadImage();

Log.i(TAG, "DrawView 3");

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

Log.i(TAG, "onDraw 1");

canvas.drawBitmap(mTileArray, x, y, pa);

}

}

通过上面的文章可以画出小方块,但注意到SnakeView一共有两构造函数,那个函数才真正起作用呢?

●public SnakeView(Context context, AttributeSet attrs)

●public SnakeView(Context context, AttributeSet attrs, int defStyle)

通过加log的方式,判断是第一个构造函数起作用。

在第一个构造函数上方有一段注释:通过XML文件构造出SnakeView

*Constructs a SnakeView based on inflation from XML 如果不使用这个构造函数,将会造成错误,可以试一下,看一下结果是怎样!本人得到如下的错误提示:

05-21 14:13:26.079: ERROR/AndroidRuntime(711): Caused by:

https://www.doczj.com/doc/2d4480803.html,ng.NoSuchMethodException: DrawView

按键处理:

public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub

if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {

Log.i(TAG, "KEYCODE_DPAD_UP");

}

return super.onKeyDown(keyCode, event);

}

如何让我们的小方块动起来?

实现小方块动起来的秘密在于view的public void invalidate ()

大家可以参看SDK文档中关于View中Drawing中的一小段话

To force a view to draw, call invalidate().//为了让view重画,可以调用invalidate函数方法:

1.在DrawView类中添加两个成员:

private int x,y;

同时实现get,set方法,

2.在构造函数中添加他们的初始值,

3.修改onDraw

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

Log.i(TAG, "onDraw 1");

canvas.drawBitmap(mTileArray, x, y, pa);

}

4.修改onKeyDown函数

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub

if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {

Log.i(TAG, "KEYCODE_DPAD_UP");

dv.setX(dv.getX()+10);

dv.invalidate();

}

return super.onKeyDown(keyCode, event);

}

最后运行结果如下图:

附:网络上关于snake分析的三篇文章

上一次我们大概讲解了下Android SDK中的演示程序Snake游戏的主框架,今天我看来看下实现的基础类TileView,从名称上不难看出这是一个方砖类,就是生成一个方块。TileView 使用了Android平台的显示基类View,View类是直接从https://www.doczj.com/doc/2d4480803.html,ng.Object派生出来的,是各种控件比如TextView、EditView的基类,当然包括我们的窗口Activity类,这些在SDK文档中都说的比较清楚。

这里定义了5个int型全局的变量,分别是方砖的数量mTileSize;方砖水平x防线的数量mXTileCount;以及竖直y方向上的方砖数量mYTileCount,下面是一个相对偏移位置mXOffset和mYOffset;这里android123主让要大家了解如何自定义View在Android开发中,在一个View类中主要是重写onSizeChanged方法来控制改变部分,以及onDraw实现画布的修改,实现的简写如下:

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {}

@Override

public void onDraw(Canvas canvas) { super.onDraw(canvas);}

我们自定义的TileView类需要自己添加一个构造方法,根据需要,我们还重载了一种包含样式的方法,这里大家可以多看下Gallery控件的实现,就好理解了,下面是基本框架。public TileView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}

public TileView(Context context, AttributeSet attrs) { super(context, attrs);}

在贪食蛇游戏中我们知道Snake是移动的,所以加入了一个清除显示的clearTiles方法,通过一个二维数组保存一个gird网格型的运动轨迹,下一次我们将会讲解android贪食蛇的游戏逻辑和完整的关联拼接实现。

今天我们分析下最复杂的SnakeView的设计,它是派生于TileView方砖类,TileView构建是基于Android直接的显示类View,如果不明白的可以查看Android示例程序Snake贪食蛇代码分析(二)一文有关TileView类的实现,首先我们看到整个游戏分 READY、PAUSE 、RUNNING 、LOSE四种mMode状态模式,分别对应准备、暂停、运行中、结束(死亡),毕竟贪食蛇没有胜利这个结果。

整个Snake的运行分4个方向,NORTH、SOUTH 、EAST、WEST分别对应了北、南、东、西四个方向,其中变量mDirection对应当前的方向,而mNextDirection

对应下个运行时的位置。这里星星分3种,使用的是一个Drawable图片,分RED_STAR、 YELLOW_STAR和GREEN_STAR三种颜色,游戏的星星出现位置由Random 随机数生成器来决定,这里Random一般和Timer系统时钟来随机生成更真实一些,通过一个Handler对象来控制画面的更新,使用了this.update();和this.invalidate();这两个本地方法,Update和invaildate均为

android.view.View类的本地方法。这里资源的使用通过Resources r = this.getContext().getResources();获取了r对象的实例,通过

r.getDrawable(R.drawable.redstar)获取资源名为redstar的资源,返回的是一个Drawable对象。

对于按键信息,直接重写View类的onKeyDown方法,这里KeyEvent传递的是按键的映射,比如KEYCODE_DPAD_UP向上,KeyEvent.KEYCODE_DPAD_DOWN向下等等,详细的查看SDK中的onKeyDown

@Override

public boolean onKeyDown(int keyCode, KeyEvent msg) {

if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {}

}

整个游戏的控制流程就是上面这些,对于游戏的逻辑而言比较简单,这个贪食蛇并没有包含3D设计和类似Nokia的能量走廊、6边形轨迹,有空了我们一起来完善一个3D的贪食蛇游戏

Android贪吃蛇课程设计报告

XXXX学院 计算机科学系 《Android程序设计》课程设计报告 题目:贪吃蛇 专业:计算机科学与技术 ! 班级: B11计科班 学号: 0 姓名:凌波微步 Q Q :25 指导教师: , 2014年6月

, 目录 第一章绪论 (2) 游戏简介 (2) 开发目的及意义 (3) 开发环境及工具 (3) 第二章需求分析 (4) 游戏界面分析 (4) 游戏角色分析 (4) — 游戏控制分析 (4) 第三章总体设计 (5) 系统功能模块层次图 (5) 运行机制 (6) 贪吃蛇功能流程图 (7) 第四章详细设计与实现 (9) SnakeActivity类 (9) MyTile类 (10) : NextActivity类 (18) SysApplication类 (19) 界面设计 (20) 第五章测试 (26) 功能测试 (26) 测试结果 (27) 第六章结论 (27)

第一章绪论 @ 游戏简介 贪吃蛇游戏是一款手机游戏,同时也是一款比较需要耐心的游戏。贪吃蛇游戏是一条蛇,不停地在手机屏幕上游走,吃在手机屏幕上出现的食物。当蛇吃掉1个食物后会变长,并且吃完食物时食物会消失,并立即随机生成1个新的食物,只要蛇头碰到屏幕四周或者碰到自己的身子,蛇就立即毙命。 开发目的及意义 通过本次课程设计,了解android软件的开发过程,熟悉并掌握JAVA语言,程序关键在于表示蛇的图形及蛇的移动。用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用一节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动。意义是方便人们在休闲时通过玩手机游戏获得一点快乐,同时锻炼自己的大脑。 开发环境及工具 在Window8下进行,采用eclipse开发工具,基于安卓操作系统。 环境搭建: 1. JDK安装 [ 2. Eclipse安装 3. Android SDK安装 4. ADT安装创建AVD

期末大作业大学生涯规划档案

期末大作业:大学生涯规划档案 ※交作业地点:2204教室 一、自我探索 1.基本情况: 2.你的职业兴趣类型(霍兰德代码)是什么?请结合霍兰德人格类型理论中对六种典型类型的描述,在下面列出 最能描述你自己的语句。 我的霍兰德代码是RSI,对机械与物体的关心比较强烈,喜欢使用工具、机器等需要基本操作技能的职业,如技术性职业(计算机硬件人员、摄影师、制图员等)。 3.你的气质类型什么?请结合希波克拉底“四液说”及巴甫洛夫高级神经类型学说对四种气质类型的描述,在下 面列出最能描述你自己的语句。 我的气质类型是黏液质。黏液质型的人属于稳重、自制、内向的类型。这类人踏实、稳重、说话慢且言语少且不善于空谈,遇事谨慎,善于克制忍让,对工作埋头苦干,但黏液质的人有些惰性,动作缓慢,不够灵活,内向,比较固执拘谨。 4.你的职业性格(MBTI)类型是什么?请根据MBTI对十六种人格类型的描述,在下面列出最能描述你自己的语 句。 我的职业性格类型是传统主义类型ISFJ。有很强的责任心和事业心,他们忠诚,能按时完成任务,注重稳定、合作和可靠,而且他们严肃认真,工作努力,有很强的服务于社会的需要和意识。他们坚定,尊重权威,天性谨慎,细心尽责,注重实用。 6.找出你最擅长并愿意在未来职业中运用的技能 1)你最重要的五项自我管理技能(形容词) 认真、慎重、热情、随和、理性 2)你最重要的五项可迁移技能(动词) 比较、分析、管理、组织、处理 3)你最重要的五项知识技能(名词) 数字、年轻人、学生、空气、计算机

8.请根据你的兴趣、气质类型、性格、能力类型及他人对你的评价,再结合自己成长经历的回顾,对你自己作一 个全面的描述。 我是一个兴趣面较窄,内向,稳重,言语少不善空谈的人,性格有点孤僻,但是外冷内热,有责任心,有担当,比较喜欢管理,工作努力,严肃认真。小学、初中、高中都当过班干部,在任期间得到了同学们的大力支持,干过一些实事,但也有翘尾巴的时候,也就是容易骄傲自满。 二、职业清单 1.你的兴趣类型建议你考虑的职业 根据你的兴趣探索结果,列出至少10种与你霍兰德类型相对应(或近似)的职业,并标出每种职业的霍兰德代码。RSI:纺织工、编织工、农业学校教师、职业课程教师、雨衣上胶工。RES:登山导游。REC:实验室动物饲养员。RIS:厨师、电器修理工、电工。 2.你的气质类型建议你考虑的职业 根据你的气质探索结果,列出至少5种与你气质类型相对应的职业 教师、医生、翻译、会计、律师、记者、主持人 3.你的性格类型建议你考虑的职业 根据你的MBTI类型偏好,从相关测评或资料中所列举的职业中挑出你最适合的职业,至少要有10种. 教师、医生、翻译、保健师、会计师、律师、医护人员、记者、图书管理员、主持人、 4.你的能力倾向建议你考虑的职业: 根据你的GA TB测量结果,列出至少5种与你能力倾向匹配(或近似)的职业 统计员、会计师、出纳、秘书、图书管理员 三、将职业清单上的职业进行分类和进一步探索 1.请根据自己的理解,将职业清单上所有出现过的职业进行分类,并说明每种职业类型的共同特点: 技能型:厨师、饲养员、电器修理工、电工。 特点:操作性工作,动手能力强,做事手脚灵活,动作协调。 事务型:登山导游、翻译、保健师、会计、律师、医护人员、记者、主持人、统计员、出纳、图书管理员。特点:尊重权威和规章制度,喜欢按计划办事,细心、有条理。 研究型:教师、医生。 特点:考虑问题理性,做事喜欢精确,喜欢逻辑分析和推理。 2.以上职业类型中,与你兴趣、气质、性格及能力均匹配某些职业类型及其包含的具体职业 (注意:这些职业类型中包含的具体职业可以是职业清单中曾出现过的,也可以是未曾出现但符合这些职业类型共同特点的职业,这些职业都值得你去深入地探索。你的职业探索最好首先集中在这些职业上,了解这些职业的要求和工作环境等细节,并根据目前你对自己兴趣、气质、性格及能力的了解,考虑一下你将会如何从事这份工作。) 技能型:厨师、饲养员、电器修理工、电工。 事务型:登山导游、会计、律师、记者、主持人、图书管理员。 3.以上职业类型中,与你兴趣、气质、性格及能力中有2-3项匹配某些职业类型及其包含的具体职业 (注意: 这些职业类型中包含的具体职业可以是职业清单中曾出现过的,也可以是未曾出现但符合这些职业类型共 同特点的职业。这些职业也有比较大的可能性,可供你进行下一步的探索。) 技能型:厨师、电器修理工、电工。 事务型:登山导游、会计、律师、记者、主持人、图书管理员。 研究型:工程师、电脑编程人员。

Android Hotfix 新方案——Amigo 源码解读

Android Hotfix 新方案——Amigo 源码解读 首先我们先来看看如何使用这个库。 用法 在project 的build.gradle中 dependencies { classpath 'me.ele:amigo:0.0.3' } 在module 的build.gradle中 apply plugin: 'me.ele.amigo' 就这样轻松的集成了Amigo。 生效补丁包 补丁包生效有两种方式可以选择: ? 稍后生效补丁包 ? 如果不想立即生效而是用户第二次打开App 时才打入补丁包,则可以将新的Apk 放到/data/data/{your pkg}/files/amigo/demo.apk,第二次打开时就会自动生效。可以通过这个方法 ? File hotfixApk = Amigo.getHotfixApk(context); ?

获取到新的Apk。 同时,你也可以使用Amigo 提供的工具类将你的补丁包拷贝到指定的目录当中。 ? FileUtils.copyFile(yourApkFile, amigoApkFile); ? ? 立即生效补丁包 ? 如果想要补丁包立即生效,调用以下两个方法之一,App 会立即重启, 并且打入补丁包。 ? Amigo.work(context); ? Amigo.work(context, apkFile); ? 删除补丁包 如果需要删除掉已经下好的补丁包,可以通过这个方法 Amigo.clear(context); 提示:如果apk 发生了变化,Amigo 会自动清除之前的apk。 自定义界面 在热修复的过程中会有一些耗时的操作,这些操作会在一个新的进程中的Activity 中执行,所以你可以通过以下方式来自定义这个Activity。

Android大作业报告

移动设备软件应用与开 发 大作业报告 姓名: 学号: 班级: 院系: 日期: 任课教师:

一、程序的运行环境、安装步骤 1、运行环境 游戏运行环境:Android1.5以上版本 2、程序的组成部份: 2.1、JDK安装 1.我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: 2.JAVA_HOME值为:D:\Program Files\Java\jdk1.6.0_18(你安装JDK 的目录) 3.CLASSPATH值 为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\b in; 4.Path: 在开始追加%JAVA_HOME%\bin; 5.NOTE:前面四步设置环境变量对搭建Android开发环境不是必须 的,可以跳过。 安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java –version 查看JDK的版本信息。出现类似下面的画面表示安装成功了: 2.2、Eclipse安装 2.3、Android SDK安装

在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。 运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Force https://..."这项,再点击Available Packages 。 选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包 在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:\AndroidDevelop\android-sdk-windows\tools)。 image图2、设置Android SDK的环境变量 “确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。 运行android –h 如果有类似以下的输出,表明安装成功: 图3、验证Android SDK是否安装成功 2.4、ADT安装

贪吃蛇游戏安卓源代码

附录1.SnakeView类 package com.example.android_snake.view; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import com.example.android_snake.R; import com.example.android_snake.food.Food; import com.example.android_snake.snake.Body; import com.example.android_snake.snake.Head; import com.example.android_snake.snake.Snake; import com.example.android_snake.snake.SnakeDirection; import com.example.android_snake.stone.Stone; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.os.Handler; import android.util.DisplayMetrics; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.ViewManager; import android.view.WindowManager; import android.widget.Toast; public class SnakeView extends View { private Context context; private Bitmap headBitmap; private Bitmap bodyBitmap; private Bitmap foodBitmap; private Bitmap stoneBitmap; // 屏幕的高度和宽度 private int screenHeight; private int screenWidth; // 每个小格子的高度和宽度 private int eachHeight;

Android期末测试题(附带答案)

一、选择题 1、下列哪项不是Android四大组件( C ) A.Seivice B. Activity C. Handler D. Content Provider 2、Android是如何组织Activity的( B ) A.以堆的方式组织Activity B. 以栈的方式组织Activity C. 以树形方式组织Activity D. 以链式方式组织Activity 3、关于线程说法不正确的是( B ) A. 在 android 中,我们可以在主线程中,创建一个新的线程 B. 在创建的新线程中,它可以操作 UI 组件 C. 新线程可以和 Handler 共同使用 D. 创建的 Handler 对象,它隶属于创建它的线程 4、下列关于内存回收的说明,哪个是正确的(B ) A.程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 5、设置xml布局文件中的字体大小一般用什么单位( c ) A.dp B. px C. sp D. pt 6、关于service生命周期的onCreate()和onStart()说法正确的是( D ) A.当第一次启动的时候先后调用onCreate()和onStart()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果service已经启动,将先后调用onCreate()和onStart()方法 D.如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法 7、Android项目工程下面的assets目录,以下说法正确的是( A ) A.这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B.主要放置多媒体等数据文件 C.主要放置图片文件 D.放置字符串,颜色,数组等常量数据 8、在android中使用SQLiteOpenHelper这个辅助类,生成一个可操作的数据库,调用的方法是( A )A.getReadableDatabase() B.getDatabase() C.getEnbleDatabase() D.createDateBase() 9、Activity从可见状态变为半透明遮盖状态时,生命周期中哪个方法被调用( B )

Android源码下载方法详解

Android: Android源码下载方法详解 分类:Android平台 安卓源码下载地址:https://www.doczj.com/doc/2d4480803.html,/source/downloading.html 相信很多下载过内核的人都对这个很熟悉 git clone git://https://www.doczj.com/doc/2d4480803.html,/kernel/common.git kernel 但是这是在以前,现在如果这么执行的话,会显示如下内容 Initialized empty Git repository in /home/star/working/kernel/.git/ https://www.doczj.com/doc/2d4480803.html,[0: 149.20.4.77]: errno=Connection refused fatal: unable to connect a socket (Connection refused) 通过浏览器输入https://www.doczj.com/doc/2d4480803.html,/,发现该网站已经被重定向为 https://www.doczj.com/doc/2d4480803.html,/source/downloading.html 可以在该页面的最后发现内核的下载方法。 下面我们介绍一下Android源码下载的步骤。 工作环境: 操作系统:Ubuntu 10.04 或Ubuntu10.10 git程序:1.7.0.4 或1.7.1 转载请注明出处:https://www.doczj.com/doc/2d4480803.html,/pku_android 方法一: 1.1 初始化安装环境 参考网页https://www.doczj.com/doc/2d4480803.html,/source/initializing.html 主要要做的就是安装jdk和安装一些软件包 $ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \ libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \ libxml2-utils 如果已经安装了,就不许要这步了 1.2 无论下载内核和源码,都需要进行如下操作 参考网页https://www.doczj.com/doc/2d4480803.html,/source/downloading.html $ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://https://www.doczj.com/doc/2d4480803.html,/dl/googlesource/git-repo/repo > ~/bin/repo 如果出现: repo init error: could not verify the tag 'v1.12.7',

《Android手机高级开发》大作业试卷及评分标准_A卷

宁波大红鹰学院 2015-2016学年第二学期 2013级本科计算机科学与技术专业《Android手机高级开发》 期末考试试卷(A卷) 考核方式:大作业 题目:智能手机软件的设计与实现 要求: 一、作品要求描述 随着智能手机的普及,基于Android平台的应用软件需求也越来越多。宁波东蓝数码有限公司是一家规模较大的软件公司,随着公司规模的不断扩大,目前新增了大量基于Android智能手机方面的业务,但由于业务量较大,公司内部开发人员一时无法满足要求,现需要外包一些智能手机应用软件。现假设你所在的公司承接了该公司智能手机外包项目的开发工作,并明确了外包的项目范围如下: (1)带共享功能的文件管理、多媒体技术制作类项目;(2)带共享功能的地图处理类项目;(3)带有服务器处理的移动端APP。 将其中一项任务下达给你,并提出了如下要求: 1.界面美观,功能实用、丰富; 2.项目中至少应包含如下四种数据存贮(SharedPreferneces/SQLite/文件 /ContentProvider)中的其中一种; 3.项目中需要包含地图处理功能; 4.项目中需要包含多媒体或物理传感方面的功能; 5.项目中对比较费时的工作,需要采用异步处理技术。 二、上交的资料(纸质及电子稿) (1)大作业报告,报告中要求项目分工明确,格式参照模板。 (2)项目源代码,如有服务器端程序,还应包括服务器端程序源码及导出的数据库sql文件。

三、考核方式 (1)以小组方式(原则上为3人/组),于18周课外时间安排答辩,按照给定评分标准打分; (2)各小组项目主题不能相同,否则以作品类同处理; (3)各小组答辩完毕,立即将其纸质稿及电子稿上交,截止时间:第十八周周末。 四、评分标准:(写明各项分值,总分值为100分) 1、大作业报告(40分) 要求及评分标准: 1)及时上交。(5分) 2)需求分析:需求描述准确简练,意思表达清楚,无明显错误;需要画出UML需求用例图及用例分析说明。(10分) 3)系统设计:需要画出参与整个系统的各个模块,解释各模块功能;用UML 画出核心模块时序图、类图,及其各个模块之间的关系。模型中的各图 表达准确,无明显错误,图与图之间的关系明确,表达完整。(10分)4)系统测试:对主要功能模块需要有测试用例,最后要有测试结果。(5分)5)系统实现:核心模块界面、关键代码,并注释。(10分) 2、软件作品(40分) 要求及评分标准: 1)及时上交。(5分) 2)界面设计:要求界面美观,操作简易,体现个性。(10分) 3)数据库设计:数据库内表的建立合理,具有最基本的约束,设置表的主键、外键,需要阐明这样设置的原因。(5分) 4)系统实现:完成项目基本功能,以该项目在市场上同类项目中一般应用功能作比较。(10分) 5) 创新性:完成项目基本模块之外的特殊功能。(10分) 3、现场答辩(20分) 要求及评分标准: 1)仪容仪表:衣着整洁、言谈得体,举止大方。(3分)

知识共享-Android版贪吃蛇源码及分析(雷惊风)

Android ----snake源码分析 代码结构分析: Snake :主游戏窗口 SnakeView:游戏视图类,是实现游戏的主体类 TileView :一个处理图片或其它 Coordinate :这是一个包括两个参数,用于记录X轴和Y轴简单类,其中包括一个比较函数. RefshHandler :用于更新视图 Snake 这个类是游戏的主游戏窗口,是框架容器。 1.游戏的开始:oncreate此外的亮点是:setContentView(https://www.doczj.com/doc/2d4480803.html,yout.snake_layout);设置窗口的 布局文件,这里Android123给大家说明的是,这里的snake_layout使用了自定义资源标签的方式,大家注意学习:这里我们可以看到来自SnakeView这个派生类的名称,由于Android内部的R.资源不包含SnakeView类,所以我们必须写清楚Package,比如com.exmple.android.snake.SnakeView 然后和其他控件使用一样,都是一个id然后宽度、高度、以及自定义的标签tileSize(尾巴长度),如下: 2.onPause:关于这点,大家可以参考下在我blog中关于active生命周期 https://www.doczj.com/doc/2d4480803.html,/admin/blogs/379826 在玩游戏过程中,如果有来电或是其它事件中断,这时应该把当前状态保存。以便返回时,还可以继续玩游戏。这就使用onSaveInstanceState实现保存当前状态。 TileView 注:此部分解析来自: Android示例程序Snake贪食蛇代码分析(三) TileView,从名称上不难看出这是一个方砖类,就是生成一个方块。 TileView使用了Android平台的显示基类View,View类是直接从https://www.doczj.com/doc/2d4480803.html,ng.Object派生出来的,是各种控件比如 TextView、EditView的基类,当然包括我们的窗口Activity类,这些在SDK文档中都说的比较清楚。

(完整版)Android应用开发期末考试题

试题 一、选择题 1 android虚拟设备的缩写是(A VD) 2 Android SDK目前支持的操作系统(DOS) 3 Android开发工具插件(ADT)没有提供的开发功能(自动更新) 4 Android SDK提供一些开发工具可以把应用软件打包成Android格式文件(APK) 5 Android当中基本的所有的UI都是由(view)或者其子类实现的 6以下不是Android中调试项目的正确步骤(测试用例) 7下列不是Activity的生命周期方法之一的是(OnResume) 8 以下可以做EditText编辑框的提示信息是(adroid:hint) 9以下不是Activity启动的方法是(gotoActivity) 10 以下不是手机操作系统的是(windows vista) 二、填空题 1 Android平台由操作系统,中间件,用户界面和应用软件组成的。 2 Android平台提供了2D,3D的图形支持,数据库支持SQLite,并且集成了浏览器 3目前已知的可以用来搭建Android开发环境的系统有windows,Linux,Mac等 4开发中推荐使用的IDE开发组合为IDE,eclipse,ADI来开发 5 Android SDK主要以java语言为基础 6创建工程时需要填写的信息名称有工程名,包的名字,Activity的名字还有应用的名字 7 Android.jar是一个标准的压缩包,其内容包含的是编译后的class,包含了全部的API 三、简答题 1 Android SDK中API的包结构的划分?至少五个 android.util,android.os,android.content,android.view,android.graphics,android.text 2 Android软件框架结构自上而下可分为哪些层? 应用程序(Application)、应用程序框架(Application Framework)、各种库(Libraries)和Android运行环境(RunTime)、操作系统层(OS) 3 Android应用程序的4大组件是什么? Activity、Broadcast Intent Receiver、Service、Content Provider 4 Android应用工程文件结构有哪些? 源文件(包含Activity),R.java文件,Android Library,assets目录res目录,drawble 目录,layout目录,values目录,AndroidManifest.xml 5 Android开发应用程序最有可能使用到的应用框架部分是哪些? 一组View(UI)组件,Content Providers,Resource Manger,Notification Manger,Activiy Manger 6 Android底层库包含哪些? 系统C库,媒体库,Surface Manager,LibWebCore,SGL 四、编程 1实现点击一个按钮,结束当前Activity并将需要返回的数据放置并关闭当前窗体请编写核心代码 Bundle bundle = new Bundle ( );

Android源代码结构分析

目录 一、源代码结构 (2) 第一层次目录 (2) bionic目录 (3) bootloader目录 (5) build目录 (7) dalvik目录 (9) development目录 (9) external目录 (13) frameworks目录 (19) Hardware (20) Out (22) Kernel (22) packages目录 (22) prebuilt目录 (27) SDK (28) system目录 (28) Vendor (32)

一、源代码结构 第一层次目录 Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示: . |-- Makefile (全局的Makefile) |-- bionic (Bionic含义为仿生,这里面是一些基础的库的源代码) |-- bootloader (引导加载器),我们的是bootable, |-- build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具) |-- dalvik (JAVA虚拟机) |-- development (程序开发所需要的模板和工具) |-- external (目标机器使用的一些库) |-- frameworks (应用程序的框架层) |-- hardware (与硬件相关的库) |-- kernel (Linux2.6的源代码) |-- packages (Android的各种应用程序) |-- prebuilt (Android在各种平台下编译的预置脚本) |-- recovery (与目标的恢复功能相关) `-- system (Android的底层的一些库)

Android编程基础大作业

宁波大红鹰学院信息工程学院 课 程 设 计 报 告 项目名称:视频播放器 项目组长:叶紫涵 项目成员:章铖豪黄韡 班级名称:12计科(2) 专业名称:计算机科学与技术 完成时间:2015年1月2日 信息工程学院制

Android编程基础大作业分组报名表项目名称视频播发器 项目功能(1) 能够播放.avi, .mp4等文件 (2) 能查找目标文件是否存在 团队成员 姓名性别年级院、系、专业学号备注 叶紫涵男12计科(2)信息工程学院 12110503 37 组长 黄韡男12计科(2)信息工程学院12110502 12 组员 章铖豪男12计科(2)信息工程学院12110503 39 组员 指导教师姓名陆正球研究 方向 软件技术职称讲师 团队联系方式联系人姓名邮件地址

目录 1.概述 (3) 1.1项目背景 (3) 1.2国内外研究状况 (3) 1.3研究的主要内容 (3) 1.4项目分工(说明各小组成员在项目中承担的工作)....... 错误!未定义书签。 2. 相关技术 (3) 3. 系统分析 (3) 4. 系统设计 (3) 4.1功能模块的流程说明 (4) 4.2数据库设计......................................... 错误!未定义书签。 5. 系统实现 (4) 6. 系统测试 (6) 7. 总结 (7) 7.1难点分析 (7) 7.2解决方案 (7)

1.概述 1.1 项目背景 近年来随着手机技术的不断发展,影音播放的应用已从单纯的电视机发展到更为广阔的领域,如电脑、MP4、平板、手机等等。 1.2 国内外研究状况 国内外各种手机视频播放器层出不穷,功能日新月异,但是各有长处和缺点,如何做一个能被大家广泛接受视频的视频播放器,是一个值得挑战的问题。 1.3 研究的主要内容 如何使用Android自带播放器实现视频播放的基本操作,以及如何选择用户想观看的视频。 2.相关技术 采用的技术是IBM公司开发的SWT,这是一种基于Java的窗口组件,类似Java本身提供的AWT和Swing窗口组件:不过IBM声称SWT比其他Java窗口组件更有效率。Eclipse 的用户界面还使用了GUI中间层JFace,从而简化了基于SWT的应用程序的构建。Eclipse 的设计思想是:一切皆插件。Eclipse核心很小,其他所有功能都以插件的形式附加于Eclipse 核心之上。Eclipse基于内核包括:图形API(SWT/JFace),Java开发环境插件(JDT),插件开发环境(PDE)等。Eclipse的插件机制是轻型软件组件化架构。在富客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby、Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。 3.系统分析 此为一个视频播放器,设计的软件需要支持快进、快退、暂停、继续和进度拖曳等功能。视频播放软件工程文件主要包括src文件夹(Java源码)、res文件夹(资源文件)和AndroidMainfest.xml(程序清单)。软件主要由Activities组成,每个Activity对应一个模块。不同的Activity通过Intent进行通信和相互调用。 4.系统设计

【计算机软件毕业设计】基于Android的贪吃蛇小游戏

河北农业大学 本科毕业论文 题目:贪吃蛇小游戏 1.导论 (1) 1.1 Android简介 (1) 1.1.1 Android的发展 (1) 1.1.2 Android系统的特点 (2) 1.1.3 Android的系统架构 (2) 1.2 项目简介 (3) 1.3 项目背景与意义 (3) 1.3.1 开发背景 (3) 1.3.2 开发意义 (3) 1.4 国内外现状分析 (4) 1.4.1 国内外手机系统现状 (4) 1.4.2 国内外手机应用现状 (5) 1.4.3 发展趋势 (5) 2. 系统的开发方法及相关技术 (7) 2.1 软件工程的定义 (7) 2.2 软件工程的模型 (7) 2.3 本项目的研究方法 (7) 2.3.1 本项目采用的开发模型 (8) 2.3.2 本项目的开发方法 (8) 2.4 开发工具及环境简介 (9) 2.4.1 开发工具eclipse简介 (9) 2.4.2 开发环境简介 (10) 3. 需求分析 (11) 3.1系统开发目标 (11) 3.2 系统需求分析 (11) 3.2.1 业务需求分析 (11) 3.2.2 用户需求分析 (11) 3.2.3 功能需求分析 (12) 4 概要设计 (13)

4.1 程序流程设计 (13) 4.2模块设计 (13) 4.2.1 模块划分 (13) 4.2.2 游戏主界面模块 (14) 4.2.3 游戏控制模块 (14) 4.2.4 游戏数据模块 (15) 4.3 模块实现原理 (15) 4.3.1游戏界面模块实现 (15) 4.3.2 游戏控制模块实现 (16) 4.3.3 数据存储模块实现 (17) 5.详细设计 (18) 5.1 游戏类图 (18) 5.2 游戏界面具体实现 (18) 5.2.1 蛇身、食物和墙的实现 (18) 5.2.2 处理键盘事件 (19) 5.2.3 TileView类的设计 (19) 5.2.4 SnakeView类的设计 (19) 5.2.5 Snake类的详细设计 (19) 5.2.6 程序主结构 (20) 5.3 游戏运行界面截图 (20) 结论 (22) 参考文献 (23) 致谢 (24)

Android USB 驱动分析

Android USB 驱动分析 一、USB驱动代码架构和使用 1、代码简介 USB驱动代码在/drivers/usb/gadget下,有三个文件:android.c, f_adb.c, f_mass_storage.c;g_android.ko 是由这三个文件编译而来,其中android.c 依赖于 f_adb.c 和 f_mass_storage.c(这两个文件之间无依赖关系)。 可在android.c中看到: static int __init android_bind_config(struct usb_configuration *c) { struct android_dev *dev = _android_dev; int ret; printk(KERN_DEBUG "android_bind_config\n"); ret = mass_storage_function_add(dev->cdev, c, dev->nluns); if (ret) return ret; return adb_function_add(dev->cdev, c); } 2、驱动使用 要使USB mass storage连接到主机: 打开/sys/devices/platform/usb_mass_storage/lun0/file文件,向 file文件写入一个存储 设备的路径,例如/dev/block/vold/179:0 (major:minor)路径; 这里的usb_mass_storage根据实际应用可以改的,由 platform_device_register函数的参数决 定。 例如: static struct platform_device fsg_platform_device = { .name = "usb_mass_storage", .id = -1, }; static void __init tegra_machine_init(void) { .... (void) platform_device_register(&fsg_platform_device); .... }

基于android的贪吃蛇游戏设计与开发论文

基于Android的贪吃蛇游戏的设计与开发1. 程序构思 贪吃蛇游戏是一款非常经典的手机游戏,贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,在设计开发过程中,需要处理好各个类之间间的逻辑依赖关系和数据通信关系。 正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用android开发Java 程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握android环境的使用方法,培养初步的项目分析能力和程序设计能力。 2.程序设计 游戏设计的处理流程图

2.1 游戏功能 本系统主要完成以下几方面的功能: 游戏控制功能——包括游戏的开始、暂停、退出 界面布局 其他辅助功能(如游戏帮助,游戏积分,游戏过关等) 2.2 总设计模块的划分 游戏总设计模块划分为游戏主要界面模块、游戏控制模块和游戏菜单模块。 2.3 游戏主界面模块 游戏主界面模块主要是指游戏的框图,其包括一下内容: 1、游戏界面的边界,即游戏中的墙; 2、游戏中蛇的构成,以及苹果的构成;

3、游戏中障碍物的构成; 4、游戏中分数显示以及关卡显示。 2.4 游戏控制模块 (1)游戏开始控制: 我们的程序是使用上键开始游戏,启动游戏后会有一个初始菜单界面,我们点击“开始游戏”,弹出一句话“请按上键开始游戏”。游戏开始后蛇向下移动,然后由控制上下左右键来控制蛇的移动。在程序中我们重新建了一个activity来控制游戏的开始,使游戏的开始界面更美观。 (2)游戏暂停控制: 我们是使用center键来控制游戏的暂停的,这是一项人性化的设计,当玩家在游戏过程中突遇紧急情况时可以按center键暂停游戏,等玩家空闲后按center键可以继续游戏。 (3)游戏退出控制: 在游戏的退出上我们的程序使用了多种方式来应对不同的情况,当玩家正在游戏中时,如想退出可以按“1”键,程序会自动跳转到初始菜单界面,在初始菜单界面点击“退出游戏”即可退出游戏。如果玩家在游戏中由于碰到墙或者咬到自己或者碰到障碍物而导致游戏结束的,游戏或自动弹出一个界面,里面有提示是继续游戏还是退出游戏,当点击“取消”时,游戏就会自动跳转到初始菜单,再点击“退出游戏”即可。 2.5类模块设计 src源码目录: Snake.java为主界面类; SnakeView 为贪吃蛇类的视图主要逻辑控制和绘制类; TitleView 为界面的整体视图; MenuActivity为菜单类,可以跳转到Help类和Snake类; Help为游戏帮助类。 3.程序实现 1、游戏界面的实现 1、先声明用来存放绘画图像的X,Y轴的位置的数组: private int[][] mTileGrid;

Android 串口编程原理和实现方式附源码

提到串口编程,就不得不提到JNI,不得不提到JavaAPI中的文件描述符类:。下面我分别对JNI、以及串口的一些知识点和实现的源码进行分析说明。这里主要是参考了开源项目android-serialport-api。 串口编程需要了解的基本知识点:对于串口编程,我们只需对串口进行一系列的设置,然后打开串口,这些操作我们可以参考串口调试助手的源码进行学习。在Java中如果要实现串口的读写功能只需操作文件设备类:即可,其他的事都由驱动来完成不用多管!当然,你想了解,那就得看驱动代码了。这里并不打算对驱动进行说明,只初略阐述应用层的实现方式。 (一)JNI: 关于JNI的文章网上有很多,不再多做解释,想详细了解的朋友可以查看云中漫步的技术文章,写得很好,分析也很全面,那么在这篇拙文中我强调3点: 1、如何将编译好的SO文件打包到APK中?(方法很简单,直接在工程目录下新建文件夹libs/armeabi,将SO文件Copy到此目录即可) 2、命名要注意的地方?(在编译好的SO文件中,将文件重命名为:lib即可。其中是编译好后生成的文件) 3、MakeFile文件的编写(不用多说,可以直接参考package/apps目录下用到JNI的相关项目写法) 这是关键的代码: [cpp]view plaincopy

(二):

文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的或。这是API的描述,不太好理解,其实可简单的理解为:就是对一个文件进行读写。 (三)实现串口通信细节 1) 建工程:SerialDemo包名:org.winplus.serial,并在工程目录下新建jni和libs两个文件夹和一个org.winplus.serial.utils,如下图: 2) 新建一个类:SerialPortFinder,添加如下代码: [java]view plaincopy 1.package org.winplus.serial.utils; 2. 3.import java.io.File; 4.import java.io.; 5.import java.io.IOException; 6.import java.io.LineNumberReader; 7.import java.util.Iterator; 8.import java.util.Vector; 9. 10.import android.util.Log; 11. 12.public class SerialPortFinder { 13. 14.private static final String TAG = "SerialPort"; 15.

相关主题
文本预览
相关文档 最新文档