从零开始学Android.docx
《从零开始学Android.docx》由会员分享,可在线阅读,更多相关《从零开始学Android.docx(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、从零开始学安卓经典教程本文是入门android的经典教材,文中既有图片直观的展示,又有文字的详细说明,并且给出了相应代码,对于初学者来说是极好的入门材料。 -谨以感谢原作者什么是OPhoneOPhone是基于Linux、面向移动互联网的终端基础软件及系统解决方案。OPhone SDK是专为OPhone平台设计的软件开发套件,它包括OPhone API,OPhone模拟器,开发工具,示例代码和帮助文档(摘自OPhone官方网站:写作本文的目的为了普及OPhone编程的基本知识,并通过复刻一个坦克大战游戏让读者了解2D游戏编程的简单思路。文中的程序结构和实现方法并非最优,希望能起到一个抛砖引玉的作
2、用,让更多的人加入到OPhone开发的行列中来。谁适合阅读本文虽然本文叫做“从零开始OPhone编程”,但并不能面对那些对编程一无所知的读者。实际上,本文要求读者了解java语言的基本知识,最好会使用eclipse。在文章的每个章节都标有难度,有能力的读者完全可以跳过相对容易的章节直接阅读自己感兴趣的内容。本文的时效性本文只适合当前版本的OPhone SDK(v1.0),本文的代码、图片、链接可能会因时间推移而失效。第一章 搭建开发环境工欲善其技,必先利其器。我们要做的第一件事就是搭建Android开发环境。本文只介绍Windows下的安装方法,Linux下的安装方法请参考官方网站的介绍。与P
3、C编程略有不同的是,Android的程序需要在模拟器中运行。因此,我们需要一个集成开发环境,一个SDK和一个模拟器。因为Android编程使用java语言,所以我们还需要JDK,最好使用安装版本( 6 Update 16 Windows版即可。集成开发环境我们选用eclipse,可以使用eclipse3.3到3.5的任意版本(http:/download.eclipse.org/eclipse/downloads/)最好下载JDT集成版。然后我们可以从Android官方网站() 下载Android SDK(当然,如果你不能翻墙,可以到国内的网站下载),SDK全部安装完毕之后,还需要安装ecli
4、pse插件。插件是用来扩展eclipse功能的。 开发Android用的插件叫ADT(Android Developer Tools),它可以帮助我们完成创建项目,向模拟器部署并运行程序,调试程序等工作。关于ADT的功能,在后面使用中我们会逐渐熟悉。安装ADT的方法如下(以eclipse3.4为例):启动eclipse,选择菜单中的Help - Software Updates点击Add Site点击Archive找到OPhone SDK安装目录下toolsophone ADT-0.8.0.zip(因为我已经安装好了ADT,所以出现了重复URL的提示),点击OK即可开始安装ADT安装完毕后还要
5、简单配置一下,打开菜单中的Window - Preferences找到Android项,通过Browse按钮指定Android SDK的安装位置至此为止,Android的安装环境就全部搭建完毕了。下一章节,我们会遇见经典的helloworld,下章见!第二章 创建第一个程序Hello Tank现在开始,我们要真正写作Android程序了。虽然前面安装过程那么复杂,但是写起程序来却是非常简单。而且为了让大家有一个直观的认识,本文不会叙述大段的原理,而是在编码的过程中渗透对原理、概念的讲解。让我们打开eclipse,选择菜单中的File - New - Project选择Android - And
6、roid Project下面需要我们输入项目的一些信息,因为我们要复刻经典游戏坦克大战,所以我们的程序就取名Tank这样,一个Android项目就创建完成了,我们可以在eclipse的Package Explorer看到我们的项目托ADT的福,虽然我们只输入了几个名字,但这个项目实际上已经可以运行了。右击项目名,选择Run As - Android Application不出意外的话,你会看到一个手机模拟器被启动,而我们刚刚建立的程序会被运行起来如 果你发现模拟器启动了,而程序并没有被运行,可能需要手工启动程序。这里我们用到一个重要的工具DDMS(Davlik Debug Manager)。运
7、行DDMS快捷方法是点击eclipse右上角的Open Perspective,如果在弹出的列表中没有DDMS,那么点击Others选择DDMS这样我们就打开了DDMS界面,这个工具我们以后会经常用到。刚刚说到模拟器启动了而程序并没有被运行,很可能是在模拟器启动过程中DDMS失去了与模拟器的链接。解决方法很简单:点击Devices标签下的工具栏,选择Reset adb然后右击项目名称,Run As - Android Application。除了右击运行项目,还可以通过工具栏上的运行按钮启动程序在运行按钮左边的是Debug按钮,这两个我们以后也会经常用到。现 在我们已经有了第一个可以运行的An
8、droid,虽然你可能对ADT生成的一堆文件感到一头雾水,也不知道程序界面上那一句“Hello World, Main”是从哪里来的,但是没关系,随着本文的深入你会逐渐熟悉Android项目的目录结构,程序设计的原则和方法,以及调试和部署的方法。现在读者 可以自己熟悉一下模拟器的操作,让我们下章再见。第三章 显示文字和图片从 本章开始,读者就要编写代码了。按照作者的原则少一些理论,多一些实践,代码中可能会有跳跃的地方。但是请大家不要着急,随着学习的深入,你很快就会 了解其中的奥秘。不过在开始之前,我们还是要先来理顺一下思路,看看完成一个坦克大战游戏需要哪些工作:首先,我们需要一个基本的程序,这
9、个程序能够在 Android上运行;这个程序要能够显示图形包括地图,主角和NPC等等;程序能够接受用户的输入,控制主角移动;程序要能够控制NPC和子弹的移动; 程序还能对各种事件做出判断,比如击中敌人,获得物品,胜利或者失败。现在我们就从基本程序开始,一步一步实现它。首先,让我们看一下刚刚生成的文件目录在源文件目录下,只有Main.java和R.java两个文件,刚刚被我们命名成Main.java的文件就是程序的入口文件。而R.java是由插件来维护的资源定义文件,我们先不管它。Main.java内容如下:package org.yexing.android.games.tank;import
10、 android.app.Activity;import android.os.Bundle;public class Main extends Activity /* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);很 幸运,Main.java的代码非常之少,而且还有一段注释,以致我们很容易知道函数onCreat
11、e的作用,需要解释的只是 setContentView()。先不要管注释中提到的Activity和setContentView的参数R.layout.main,我们使用 setContentView的另一种形式:setContentView(View view)。setContentView的作用是设定当前使用的视图即View(依此理解,可以有很多个View,需要用哪个就可以把他作为 setContentView的参数显示出来)。View是一个非常重要的组件,它可以用来显示文字,图片,也可以接收客户的操作,比如触摸屏,键盘等 等,而我们的游戏中正是需要绘图和交互,看来View很符合我们的需要(
12、但是请注意,使用View并不是我们的最终方案,原因会在后面说明。此处介绍 View是为了讲解基础的图形和用户控制)。下面我们就要订制一个属于自己的View,可以通过继承自系统提供的View,并重载相关的函数来实现。创建类的方法如下:右击包名 New - Class我们将这个View类命名为GameView,并且由android.view.View继承点 击Finish,一个View类就创建好了。这里是第一次创建类,以后就不会有图片演示了,请大家记住的这个方法。GameView创建好了,但是代码还 有一些错误,这里介绍一下eclipse的使用技巧,将鼠标悬停在有错误的位置,或者将光标停在有错误的
13、行,然后按Ctrl+1键,就会出现修改建议,大 部分时候,使用修改建议都可以改正我们的错误,如图可以看出来,刚刚的错误是因为没有创建构造函数,选择修改建议的第二项,增加一个构造函数public GameView(Context context) super(context);/ TODO Auto-generated constructor stub我们的View就创建好了。回到Main.java,刚刚说了,只要将View作为setContentView的参数,这个View就可以被显示出来:public void onCreate(Bundle savedInstanceState) supe
14、r.onCreate(savedInstanceState);setContentView(new GameView(this);现在让我们运行模拟器,看看程序变成什么样子了(启动模拟器的方法见第二章)。不要意外,屏幕上就是一片空白,因为我们创建了一个View,但是没有让它显示任何内容。下面我们就会在View上显示一段文字和一张图片。让View显示内容也很简单,只需要重载View的onDraw函数,把相应的语句写入onDraw中即可。打开GameView.java,点击菜单 Source - Override/Implement Method选中onDraw点击OK下面这段代码就会被加入到程序
15、当中,所有与显示有关的代码都会在这里面完成Overrideprotected void onDraw(Canvas canvas) / TODO Auto-generated method stubsuper.onDraw(canvas);这 里我们遇到了又一个非常重要的类Canvas,Canvas一般翻译成画布,所有的绘图操作都是通过Canvas中的函数来完成的,比如显示文字的函数 Canvas.drawText(),显示位图的函数Canvas.drawBitmap(),以及各种绘制图形的函数如 Canvas.drawRect(),Canvas.drawArc()等等。下面让我们显示一段文字
16、在屏幕上:protected void onDraw(Canvas canvas) / TODO Auto-generated method stubsuper.onDraw(canvas);canvas.drawText(坦克大战, 50, 50, new Paint();坦克大战四个字已经出现在了屏幕上。让我们来详细看一下这条语句:canvas.drawText(坦克大战, 50, 50, new Paint();第 一个参数是要显示的文字,第二、第三个参数是文字在屏幕上的坐标,说到坐标得多讲两句。在2D编程中,屏幕坐标的原点是屏幕的左上角,横向向右增大,纵向 向下增大,如上图所示。最后一
17、个参数是Paint,通常翻译成画笔,它决定了文字或图形的颜色,字体,线条粗细等等,后面用到相应属性的时候会详细介绍。 那么这条语句就是在屏幕上(50,50)的位置用缺省的画笔写出“坦克大战”四个字。另外如果eclipse提示代码错误,不要忘了用Ctrl+1。有了文字,下面就是图像了。显示图像比显示文字略微复杂一些,首先我们要准备一张位图,图片必须是png格式的,文件名只能是小写字母,数字和下划线。battlecity.png然后将这张图片copy到工程的res/drawable目录下。可以直接在eclipse的目录树中粘贴。显示位图的函数是Canvas.drawBitmap(),drawBit
18、map有很多种形态,我们先看其中最简单的一种canvas.drawBitmap(bitmap, left, top, paint)乍 一看似乎和drawText差不多,4个参数有三个都相同,但这第一个参数bitmap要比文本复杂得多。首先,他是一个Bitmap类实例,因为我们现 在还不需要这个类的其他功能,所以不过多介绍Bitmap,只考虑它是怎么来的。得到Bitmap实例的方法也有很多种,这里只介绍其中的一种BitmapFactory.decodeResource(res, id);此 方法可以返回一个bitmap实例,但是这个函数还需要两个参数res和id。res是Resources实例,
19、而id是一个整数,下面让我们分别了解这 两个参数。res的地位跟bitmap差不多,只需要作为参数被使用,因此,只要得到实例就可以了,获得Resources实例的方法如下:res = context.getResources();天哪,事情越来越复杂了,因为这段代码里面有多了一个陌生面孔context。context是Context实例,Context通常翻译做上下文,这个名称似乎有点晦涩,他究竟是什么呢?让我们回头看看写好的程序public GameView(Context context) super(context);/ TODO Auto-generated constructor s
20、tub这时候我们有一个context实例,继续朔源而上,在Main.java中public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(new GameView(this);原来,context指向Main类。好了,我们终于找到res的源头了。还有另外一个分支第二个参数id。BitmapFactory.decodeResource(res, id);id是一个整形,它到底是谁的id呢?我们还是得往前面找,还记得我们第一次见到函数setContentView时
21、什么样子么setContentView(R.layout.main);对,他的参数是R.layout.main,后来被我们替换成了GameView实例。R.layout.main就是一个整数。它被定义在文件R.java中,我们前面讲过R.java是由插件维护的资源定义文件。说到这里大家应该猜到了吧。让我们打开R.java文件public final class R public static final class attr public static final class drawable public static final int battlecity=0x7f;public sta
22、tic final int icon=0x7f;public static final class layout public static final int main=0x7f;public static final class string public static final int app_name=0x7f;public static final int hello=0x7f;果然,位图文件battlecity.png在这里面也被分配了一个id:R.drawable.battlecity,没错,就是它了,这就是我们要找的id。至此为止,我们终于可以使用drawBitmap了。对于
23、一次创建,多次使用的资源,我们把他放到构造函数里面。增加了图形显示的GameView如下:public class GameView extends View Bitmap bmp;public GameView(Context context) super(context);/ TODO Auto-generated constructor stubResources res = context.getResources();bmp = BitmapFactory.decodeResource(res, R.drawable.battlecity);Overrideprotected voi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 从零开始 Android
限制150内