疯狂Android讲义(第3版)(含CD光盘1张)图书
人气:44

疯狂Android讲义(第3版)(含CD光盘1张)

移动互联网是当今世界发展快、市场潜力大、前景诱人的一项业务,而Android则是移动互联网上市场占有率很高的平台。

内容简介

移动互联网是当今世界发展快、市场潜力大、前景诱人的一项业务,而Android则是移动互联网上市场占有率很高的平台。

《疯狂Android讲义(第三版)》是《疯狂Android讲义》的第3版,采用了Google推荐的IDE:AndroidStudio作为开发工具。《疯狂Android讲义(第三版)》介绍了Android应用开发的相关知识,全书内容覆盖了Android用户界面编程、Android四大组件、Android资源访问、图形/图像处理、事件处理机制、Android输入/输出处理、音频/视频多媒体应用开发、OpenGL与3D应用开发、网络通信编程、Android平台的Web Service、传感器应用开发、GPS应用开发、整合第三方Map服务等。

《疯狂Android讲义(第三版)》不局限于介绍Android编程的各种理论知识,而是从“项目驱动”的角度来讲授理论,全书一共包括近百个实例,这些示范性的实例既可帮助读者更好地理解各知识点在实际开发中的应用,也可供读者在实际开发时作为参考、拿来就用。《疯狂Android讲义(第三版)》在后面还提供了两个实用的案例:合金弹头和电子拍卖系统Android客户端,具有极高的参考价值。《疯狂Android讲义(第三版)》提供了配套的答疑网站,如果读者在阅读《疯狂Android讲义(第三版)》时遇到了技术问题,可以登录疯狂Java联盟发帖,笔者将会及时予以解答。

编辑推荐

总编荐书,经典与你同行 自面市以来重印30 次,发行量超16万册,并屡获殊荣!

开卷数据显示Android图书排行榜前三

曾获评CSDN年度具有技术影响力十大原创图书

多次荣获年度畅销图书及长销图书大奖

被工信出版集团授予年度“出版物”奖

作者简介

李刚,十余年软件开发从业经验,疯狂软件教育中心教学总监。疯狂Java实训营创始人,疯狂Java体系原创图书作者。广东技术师范学院计算机科学系兼职副教授,51CTO专家门诊特邀嘉宾。培训的学生已在华为、IBM、阿里软件、网易、电信盈科等名企就职。国内知名高端IT技术图书作家,已出版《疯狂Java讲义》《疯狂Android讲义》《轻量级JavaEE企业应用实战》《疯狂iOS讲义(基础篇)(提高篇)》《疯狂前端开发讲义》《疯狂HTML5/CSS3/JavaScript讲义》《疯狂XML讲义》《经典JavaEE企业应用实战》《Struts2。x专业指南》等著作。其中疯狂Java体系图书均已沉淀多年,赢得极高的市场认同,多次重印,多部著作印刷数量超过10万册,并被多所“985”“211”院校选作教材,部分图书已被翻译成繁体中文版,授权到中国台湾地区。

目录

第1章Android应用和开发环境 1

1.1Android的发展和历史 2

1.1.1Android的发展和简介 2

1.1.2Android 5.x平台架构及特性 3

1.2搭建Android开发环境 5

1.2.1安装Android Studio 5

1.2.2下载和安装Android SDK 8

1.2.3安装运行、调试环境 11

1.3Android常用开发工具的用法 16

1.3.1在命令行创建、删除和浏览AVD 16

1.3.2使用Android模拟器(Emulator) 17

1.3.3使用Monitor进行调试 18

1.3.4Android Debug Bridge(ADB)的用法 19

1.3.5使用mksdcard管理虚拟SD卡 20第1章Android应用和开发环境 1

1.1Android的发展和历史 2

1.1.1Android的发展和简介 2

1.1.2Android 5.x平台架构及特性 3

1.2搭建Android开发环境 5

1.2.1安装Android Studio 5

1.2.2下载和安装Android SDK 8

1.2.3安装运行、调试环境 11

1.3Android常用开发工具的用法 16

1.3.1在命令行创建、删除和浏览AVD 16

1.3.2使用Android模拟器(Emulator) 17

1.3.3使用Monitor进行调试 18

1.3.4Android Debug Bridge(ADB)的用法 19

1.3.5使用mksdcard管理虚拟SD卡 20

1.4开始di一个Android应用 21

1.4.1使用Android Studio开发及时个Android应用 21

1.4.2通过Andorid Studio运行Android应用 24

1.5Android应用结构分析 25

1.5.1创建一个Android应用 25

1.5.2自动生成的R.java 28

1.5.3res目录说明 29

1.5.4Android应用的清单文件:AndroidManifest.xml 30

1.5.5应用程序权限说明 31

1.6Android应用的基本组件介绍 32

1.6.1Activity和View 32

1.6.2Service 33

1.6.3BroadcastReceiver 33

1.6.4ContentProvider 33

1.6.5Intent和IntentFilter 34

1.7签名Android应用程序 35

1.7.1使用Android Studio对Android应用签名 35

1.7.2使用命令对APK包签名 36

1.8本章小结 37

第2章Android应用的界面编程 38

2.1界面编程与视图(View)组件 39

2.1.1视图组件与容器组件 39

2.1.2使用XML布局文件控制UI界面 44

2.1.3在代码中控制UI界面 44

实例:用编程的方式开发UI界面 44

2.1.4使用XML布局文件和Java代码混合控制UI界面 46

实例:简单图片浏览器 46

2.1.5开发自定义View 47

实例:跟随手指的小球 48

2.2第1组UI组件:布局管理器 49

2.2.1线性布局 50

2.2.2表格布局 52

实例:丰富的表格布局 53

2.2.3帧布局 55

实例:霓虹灯效果 57

2.2.4相对布局 58

实例:梅花布局效果 59

2.2.5网格布局 60

实例:计算器界面 61

2.2.6布局 62

实例:登录界面 63

2.3第2组UI组件:TextView及其子类 64

2.3.1文本框(TextView)与编辑框(EditText)的功能和用法 64

实例:不同颜色、字体、带链接的文本 67

实例:圆角边框、渐变背景的TextView 68

2.3.2EditText的功能与用法 70

实例:用户友好的输入界面 70

2.3.3按钮(Button)组件的功能与用法 72

实例:按钮、圆形按钮、带文字的图片按钮 72

2.3.4使用9Patch图片作为背景 73

2.3.5单选钮(RadioButton)和复选框(CheckBox)的功能与用法 74

实例:利用单选钮、复选框获取用户信息 75

2.3.6状态开关按钮(ToggleButton)和开关(Switch)的功能与用法 77

实例:动态控制布局 77

2.3.7时钟(AnalogClock和TextClock)的功能与用法 79

实例:手机里的“劳力士” 79

2.3.8计时器(Chronometer) 80

2.4第3组UI组件:ImageView及其子类 81

实例:图片浏览器 83

实例:强大的图片按钮 86

实例:使用QuickContactBadge关联联系人 87

2.5第4组UI组件:AdapterView及子类 88

2.5.1列表视图(ListView)和ListActivity 89

实例:改变分隔条、基于数组的ListView 90

2.5.2Adapter接口及实现类 91

实例:使用ArrayAdapter创建ListView 91

实例:基于ListActivity实现列表 93

实例:使用SimpleAdapter创建ListView 94

实例:扩展BaseAdapter实现不存储列表项的ListView 97

2.5.3自动完成文本框(AutoCompleteTextView)的功能与用法 98

2.5.4网格视图(GridView)的功能与用法 100

实例:带预览的图片浏览器 101

2.5.5可展开的列表组件(ExpandableListView) 103

2.5.6Spinner的功能与用法 106

实例:让用户选择 106

2.5.7AdapterViewFlipper的功能与用法 108

实例:自动播放的图片库 108

2.5.8StackView的功能与用法 111

实例:叠在一起的图片 111

2.6第5组UI组件:ProgressBar及其子类 112

2.6.1进度条(ProgressBar)的功能与用法 113

实例:显示在标题上的进度条 116

2.6.2拖动条(SeekBar)的功能与用法 117

实例:通过拖动滑块来改变图片的透明度 117

2.6.3星级评分条(RatingBar)的功能与用法 118

实例:通过星级改变图片的透明度 119

2.7第6组UI组件:ViewAnimator及其子类 120

2.7.1ViewSwitcher的功能与用法 120

实例:仿Android系统Launcher界面 120

2.7.2图像切换器(ImageSwitcher)的功能与用法 125

实例:支持动画的图片浏览器 125

2.7.3文本切换器(TextSwitcher)的功能与用法 127

2.7.4ViewFlipper的功能与用法 129

实例:自动播放的图片库 129

2.8各种杂项组件 131

2.8.1使用Toast显示提示信息框 131

实例:带图片的消息提示 131

2.8.2日历视图(CalendarView)组件的功能和用法 133

实例:选择您的生日 133

2.8.3日期、时间选择器(DatePicker和TimePicker)的功能和用法 134

实例:用户选择日期、时间 135

2.8.4数值选择器(NumberPicker)的功能与用法 137

实例:选择您意向的价格范围 137

2.8.5搜索框(SearchView)的功能与用法 139

实例:搜索 139

2.8.6选项卡(TabHost)的功能和用法 141

实例:通话记录界面 141

2.8.7滚动视图(ScrollView)的功能和用法 143

实例:可垂直和水平滚动的视图 144

2.8.8Notification的功能与用法 144

实例:加薪通知 145

2.9第7组UI组件:对话框 146

2.9.1使用AlertDialog创建对话框 147

实例:显示提示消息的对话框 147

实例:简单列表项对话框 149

实例:单选列表项对话框 149

实例:多选列表项对话框 150

实例:自定义列表项对话框 151

实例:自定义View对话框 152

2.9.2对话框风格的窗口 154

2.9.3使用PopupWindow 155

2.9.4使用DatePickerDialog、TimePickerDialog 156

2.9.5使用ProgressDialog创建进度对话框 158

2.10菜单 160

2.10.1选项菜单和子菜单(SubMenu) 161

2.10.2使用监听器来监听菜单事件 164

2.10.3创建多选菜单项和单选菜单项 164

2.10.4设置与菜单项关联的Activity 165

2.10.5上下文菜单 166

2.10.6使用XML文件定义菜单 167

实例:使用XML资源文件定义菜单 168

2.10.7使用PopupMenu创建弹出式菜单 171

2.11使用活动条(ActionBar) 173

2.11.1启用ActionBar 173

2.11.2使用ActionBar显示选项菜单项 174

2.11.3启用程序图标导航 176

2.11.4添加Action View 177

实例:“标题”上的时钟 177

2.11.5使用ActionBar实现Tab导航 178

实例:ActionBar结合Fragment实现Tab导航 179

实例:Android 3.0以前的Fragment支持 182

2.11.6使用ActionBar实现下拉式导航 185

实例:ActionBar结合Fragment实现下拉式导航 185

2.12本章小结 187

第3章Android的事件处理 188

3.1Android事件处理概述 189

3.2基于监听的事件处理 189

3.2.1监听的处理模型 189

3.2.2事件和事件监听器 192

实例:控制飞机移动 192

3.2.3内部类作为事件监听器类 195

3.2.4外部类作为事件监听器类 195

3.2.5Activity本身作为事件监听器类 197

3.2.6匿名内部类作为事件监听器类 197

3.2.7直接绑定到标签 198

3.3基于回调的事件处理 199

3.3.1回调机制与监听机制 199

3.3.2基于回调的事件传播 201

3.3.3重写onTouchEvent方法响应触摸屏事件 202

实例:通过回调实现跟随手指的小球 203

3.4响应系统设置的事件 204

3.4.1Configuration类简介 204

实例:获取系统设备状态 205

3.4.2重写onConfigurationChanged方法响应系统设置更改 206

实例:监听屏幕方向的改变 206

3.5Handler消息传递机制 208

3.5.1Handler类简介 208

实例:自动播放动画 209

3.5.2Handler、Loop、MessageQueue的工作原理 210

实例:使用新线程计算质数 211

3.6异步任务(AsyncTask) 213

实例:使用异步任务执行下载 214

3.7本章小结 217

在线预览

第18章合金弹头

本章要点

● 开发射击类游戏的基本方法

● 游戏的界面分解和分析

● 游戏界面组件的分析和实现

● 怪物的移动和发射子弹

● 实现角色移动、跳跃、发射子弹等行为

● 检测子弹是否命中目标

● 实现游戏的绘图工具类

● 管理游戏资源

● 继承SurfaceView实现游戏主组件

● 掌握SurfaceView的绘图机制

● 使用多线程实现游戏动画

● 实现游戏的Activity

18.2 开发游戏界面组件

在开发游戏之前,首先需要从程序员的角度来分析游戏界面,并逐步实现游戏界面上的各种组件。

18.2.1 游戏界面分析

对于图18.1所示的游戏界面,从普通玩家的角度来看,他会看到游戏界面上有受玩家控制移动、跳跃、发射子弹的角色,还有不断发射子弹的敌人、地上有炸弹、天空中有正在爆炸的飞机……乍看上去会给人眼花缭乱的感觉。

如果从程序员的角度来看,游戏界面大致可分为如下组件。

游戏背景:只是一张静止的图片。

角色:该角色可以站立、走动、跳跃、射击。

怪物:怪物类代表了游戏界面上所有的敌人,包括拿枪的敌人、地上的炸弹、天空中的飞机……虽然这些怪物的图片不同、发射的子弹不同,攻击力也可能不同,但这些只是实例与实例之间的差异,因此程序只要为怪物定义一个类即可。

子弹:不管是角色发射的子弹还是怪物发射的子弹,都可归纳为子弹类。虽然不同子弹的图片不同,攻击力不同,但这些只是实例与实例之间的差异,因此程序只要为子弹定义一个类即可。

从上面介绍不难看出,开发这款游戏,主要就是实现上面的角色、怪物和子弹3个类。

18.2.2 实现“怪物”类

由于不同怪物之间会存在各种差异,那么此处就需要为怪物类定义相应的实例变量来记录这些差异。不同怪物之间可能存在如下差异。

怪物的类型。

代表怪物位置的X、Y坐标。

标识怪物是否已经死亡的旗标。

绘制怪物图片左上角的X、Y坐标。

绘制怪物图片右下角的X、Y坐标。

怪物发射的所有子弹。(有的怪物不会发射子弹)

怪物未死亡时所有的动画帧图片和怪物死亡时所有的动画帧图片。

本程序并未把怪物的所有动画帧图片直接保存在怪物实例中,本程序将会专门使用一个工具类来保存所有角色、怪物的所有动画帧图片。

为了让游戏界面的角色、怪物都能“动起来”,程序的实现思路是这样的:程序会专门启动一条独立的线程,这条线程负责控制角色、怪物不断地更换新的动画帧图片——因此程序需要为怪物增加一个成员变量来记录当前游戏界面正在绘制怪物动画的第几帧,而负责动画的独立线程只要不断地调用怪物的绘制方法即可——实际上该绘制方法每次只是绘制一张静态图片(这张静态图片是怪物动画的其中一帧)。

下面是怪物类的成员变量部分。

程序清单:codes\18\MetalSlug\app\src\main\java\org\crazyit\metalslug\comp\Monster.java

// 定义代表怪物类型的常量(如果程序还需要增加更多怪物,只需在此处添加常量即可)

public static final int TYPE_BOMB = 1;

public static final int TYPE_FLY = 2;

public static final int TYPE_MAN = 3;

// 定义怪物类型的成员变量

private int type = TYPE_BOMB;

// 定义怪物X、Y坐标的成员变量

private int x = 0;

private int y = 0;

// 定义怪物是否已经死亡的旗标

private boolean isDie = false;

// 绘制怪物图片左上角的X坐标

private int startX = 0;

// 绘制怪物图片左上角的Y坐标

private int startY = 0;

// 绘制怪物图片右下角的X坐标

private int endX = 0;

// 绘制怪物图片右下角的Y坐标

private int endY = 0;

// 该变量用于控制动画刷新的速度

int drawCount = 0;

// 定义当前正在绘制怪物动画的第几帧的变量

private int drawIndex = 0;

// 用于记录死亡动画只绘制一次,不需要重复绘制

// 每当怪物死亡时,该变量会被初始化为等于死亡动画的总帧数

// 当怪物的死亡动画帧播放完成时,该变量的值变为0

private int dieMaxDrawCount = Integer.MAX_VALUE;

// 定义怪物射出的子弹

private List bulletList = new ArrayList();

上面的成员变量即可记录该怪物实例的各种状态。实际上以后程序要升级,比如为怪物增加更多的特征,如怪物可以拿不同的武器,怪物可以穿不同的衣服,怪物可以具有不同的攻击力……这些都可考虑定义成怪物的成员变量。

下面是怪物类的构造器,该构造器只要传入一个type参数即可,该type参数告诉系统,该怪物是哪种类型的怪物。

程序清单:codes\18\MetalSlug\app\src\main\java\org\crazyit\metalslug\comp\Monster.java

public Monster(int type)

{

this.type = type;

// -------下面代码根据怪物类型来初始化怪物X、Y坐标------

// 如果怪物是炸弹(TYPE_BOMB)或敌人(TYPE_MAN)

// 怪物的Y坐标与玩家控制的角色的Y坐标相同

if (type == TYPE_BOMB || type == TYPE_MAN)

{

y = Player.Y_DEFALUT;

}

// 如果怪物是飞机,根据屏幕高度随机生成怪物的Y坐标

else if (type == TYPE_FLY)

{

y = ViewManager.SCREEN_HEIGHT 50 / 100

- Util.rand((int) (ViewManager.scale 100));

}

// 随机计算怪物的X坐标。

x = ViewManager.SCREEN_WIDTH Util.rand(ViewManager.SCREEN_WIDTH >> 1)

- (ViewManager.SCREEN_WIDTH >> 2);

}

从上面的粗体字代码可以看出,程序在创建怪物实例时,不仅负责初始化怪物的type成员变量,还会根据怪物类型来设置怪物的X、Y坐标。

如果怪物是炸弹和拿枪的人(都在地面上),那么它们的Y坐标与角色默认的Y坐标(在地面上)相同。如果怪物是飞机,那么怪物的Y坐标是随机计算的。

不管什么怪物,它的X坐标都是随机计算的。

上面程序中还用到一个Util工具类,该工具类仅仅包含一个计算随机数的方法。下面是该工具类的代码。

程序清单:codes\18\MetalSlug\app\src\main\java\org\crazyit\metalslug\comp\Util.java

public class Util

{

public static Random random = new Random();

// 返回一个0~range的随机数

public static int rand(int range)

{

// 如果range为0,直接返回0

if (range == 0)

return 0;

// 获取一个0~range之间的随机数

return Math.abs(random.nextInt() % range);

}

}

前面已经介绍了绘制怪物动画的思路:程序将会采用后台线程来控制不断地绘制怪物动画的下一帧,但实际上每次绘制的只是怪物动画的某一帧。下面是绘制怪物的方法。

程序清单:codes\18\MetalSlug\app\src\main\java\org\crazyit\metalslug\comp\Monster.java

// 绘制怪物的方法

public void draw(Canvas canvas)

{

if (canvas == null)

{

return;

}

switch (type)

{

case TYPE_BOMB:

// 死亡的怪物用死亡图片

drawAni(canvas, isDie ? ViewManager.bomb2Image : ViewManager.bombImage);

break;

case TYPE_FLY:

// 死亡的怪物用死亡图片

drawAni(canvas, isDie ? ViewManager.flyDieImage : ViewManager.flyImage);

break;

case TYPE_MAN:

// 死亡的怪物用死亡图片

drawAni(canvas, isDie ? ViewManager.manDieImage : ViewManager.manImgae);

break;

default:

break;

}

}

// 根据怪物的动画帧图片来绘制怪物动画

public void drawAni(Canvas canvas, Bitmap[] bitmapArr)

{

if (canvas == null)

{

return;

}

if (bitmapArr == null)

{

return;

}

// 如果怪物已经死亡,且没有播放过死亡动画

//(dieMaxDrawCount等于初始值表明未播放过死亡动画)

if (isDie && dieMaxDrawCount == Integer.MAX_VALUE)

{

// 将dieMaxDrawCount设置为与死亡动画的总帧数相等

dieMaxDrawCount = bitmapArr.length; // ⑤

}

drawIndex = drawIndex % bitmapArr.length;

// 获取当前绘制的动画帧对应的位图

Bitmap bitmap = bitmapArr[drawIndex]; // ①

if (bitmap == null || bitmap.isRecycled())

{

return;

}

int drawX = x;

// 对绘制怪物动画帧位图的X坐标进行微调

if (isDie)

{

if (type == TYPE_BOMB)

{

drawX = x - (int) (ViewManager.scale 50);

}

else if (type == TYPE_MAN)

{

drawX = x (int) (ViewManager.scale 50);

}

}

// 对绘制怪物动画帧位图的Y坐标进行微调

int drawY = y - bitmap.getHeight();

// 绘制怪物动画帧的位图

Graphics.drawMatrixImage(canvas, bitmap, 0, 0, bitmap.getWidth(),

bitmap.getHeight(), Graphics.TRANS_NONE, drawX, drawY, 0,

Graphics.TIMES_SCALE);

startX = drawX;

startY = drawY;

endX = startX bitmap.getWidth();

endY = startY bitmap.getHeight();

drawCount ;

// 后面的6、4用于控制人、飞机发射子弹的速度

if (drawCount >= (type == TYPE_MAN ? 6 : 4)) // ③

{

// 如果怪物是人,只在第3帧才发射子弹

&nbs

网友评论(不代表本站观点)

来自无昵称**的评论:

在当当上面买,就是买放心,懒得折腾,书是正品,包装也很好,关键是物流非常快,晚上下的订单,第二天上午就到了,非常nice

2015-08-18 23:10:32
来自无昵称**的评论:

比起视频学习,还是买书靠谱点,很适合我这种初学者

2016-08-22 16:47:41
来自无昵称**的评论:

为单位买的学习的好书值得购买非常好,很满意,物流快

2016-08-29 11:23:44
来自无昵称**的评论:

基本的知识点都讲解单位了,作为入门提高的书是很适合的

2016-09-06 23:06:26
来自黯惔哋,**的评论:

需要一本用as开发的书来了解这个ide,因此选择了这本书

2015-08-07 13:44:09
来自无昵称**的评论:

初学者的工具书。在google上不了的情况下。

2016-12-04 12:51:29
来自无昵称**的评论:

书到手真的好厚啊,不过当当还是一如既往的划算,发货也快

2016-09-20 17:57:58
来自庄户银**的评论:

下完单第二天就收到了 书特别厚 讲的很详细 适合入门的人使用 不过要有一点java基础

2016-04-23 21:48:16
来自陌影丶**的评论:

书不错,内容好,质量也好。大家在这上面买那本疯狂JAVA讲义时要小心了,书的质量不是一般的差,翻了几页整个屋里都是刺鼻的味道,,,没有最差,只有更差

2016-01-23 22:25:35
来自无昵称**的评论:

速度确实很快,不过包装吧,这个我要吐槽一下,有点简陋,内容大题看了一下,很丰富,很适合初学人士,希望用这个可以提高一些能力,谢谢合作

2015-09-12 10:32:20
来自无昵称**的评论:

书纸张不错,安卓入门的话还是第一行代码要好一些!这本书一开始罗列了太多知识点,容易让新手知难而退

2016-05-16 09:23:05
来自匿名用**的评论:

好厚啊我的哥,为啥不分成上下两册,估计这本大厚书我还没看到后面就已经散架了。

2017-01-24 10:32:44
来自天***(**的评论:

这次包装不太好,只有一层快递袋包着,书都皱了

2017-06-02 13:13:36
来自某个呆**的评论:

内容还没来得及看,物流给个大大的好评,晚上下单 第二天上午就到了,惊喜! 沈阳黄马甲 ,赞。书的评价之后补充。

2016-08-01 11:33:44
来自匿名用**的评论:

感觉不是很好,慢慢看吧,可能当做工具书比较合适

2017-07-09 16:28:25
来自无昵称**的评论:

老师一直推荐这本书很不错,我也稍微看了一下,觉得挺好的,于是就买了。买来翻看了一下,里面好多实例,每章都有。是一本很实用的书。

2016-01-17 19:35:28
来自匿名用**的评论:

非常好的一本Android学习教程,内容丰富,例子详尽,实用性强!

2017-10-16 23:41:35
来自无昵称**的评论:

不错不错。正版书籍,值得一看。物流也很给力,第二天就到了。我选的是货到刷卡支付方式,结果不能刷卡付款,最终还是现金付的,有点遗憾。

2016-12-07 23:47:03
来自无昵称**的评论:

包装确实不咋滴,主要是书角有点扭了,书本来就挺厚的,磕磕碰碰复原不过来的,一层气泡膜是包小书的吧,来的时候从书的翻页的地方包回来,书角都没包不到,挺遗憾的,一本好书。

2015-08-08 16:58:28
来自彬***(**的评论:

内容全面,很经典的书,学习android应用开发,这一本就足够了

2017-06-19 13:01:53
来自***(匿**的评论:

包装不错哦,整体感觉不错,性价比很高,印刷很正,字迹清晰,纸质好。排版也不错。适合入门,不错信息更新换代快,如果用最新版软件,会有一些差异,不过不影响学习。

2017-05-17 13:52:52
来自无昵称**的评论:

Android Studio至今没多少人为它写教程,这本书做到了。如果能列出更多的控件就更适合初学者了。

2015-11-26 10:38:49
来自无昵称**的评论:

200-100活动买的,划算。然后凑够20字拿3000+积分!!!然后凑够20字拿3000+积分!!!然后凑够20字拿3000+积分!!!然后凑够20字拿3000+积分!!!然后凑够20字拿3000+积分!!!

2016-04-23 20:39:51
来自渐行渐**的评论:

学Android必备的书籍,讲的挺详细的,一如李刚的风格

2016-12-11 19:27:12
来自woshihg**的评论:

书很不错,涵盖面广,适合有一定编程经验的Android新手,值得推荐

2016-09-19 13:01:01
来自joyeven**的评论:

本书并不局限于介绍Android编程的各种理论知识,而是从“项目驱动”的角度来讲授理论,全书一共包括近百个实例,这些示范性的实例既可帮助读者更好地理解各知识点在实际开发中的应用,也可供读者在实际开发时作为参考、拿来就用。本书*后还提供了两个实用的案例:合金弹头和电子拍卖系统Android客户端,具有极高的参考价值。本书提供了配套的答疑网站,如果读者在阅读本书时遇到了技术问题,可以登录疯狂Java联盟发帖,笔者将会及时予以解答。

2017-10-18 10:19:26
来自无昵称**的评论:

这本书是很好的入门书籍,可以巩固以及了解所有变成的基本概念,是比较基础的一些实例,这套书不是长篇大论的讲理论,很适合有些基础的程序员,在开发过程中遇到的问题里面几乎都有讲解,可以当做工具书用,真心不错,值得推荐

2015-08-07 17:18:19
登录后即可发表评论

免责声明

更多相关图书
在线咨询