本書是一部Android開發的實戰教程,由淺入深、由基礎到高級,帶領讀者一步一步走進App開發的神奇世界。 全書共分為16章。其中,前8章是基礎部分,主要講解Android Studio的環境搭建、App開發的各種常用控件、App的數據存儲方式、如何調試App并將App上線;后8章是進階部分,主要講解App開發的設備操作、網絡通信、事件、動畫、多媒體、融合技術、第三方開發包、性能優化等。書中在講解知識點的同時給出了大量實戰范例,方便讀者迅速將所學的知識運用到實際開發中。通過本書的學習,讀者能夠掌握3類主流App的基本開發技術,包括購物App(電子商務)、聊天App(即時通信)、打車App(交通出行)。另外,能夠學會開發一些趣味應用,包括簡單計算器、房貸計算器、萬年歷、日程表、手機安全助手、指南針、衛星渾天儀、摳圖工具、動感影集、影視播放器、音樂播放器、WIFI共享器等。 本書適用于Android開發的廣大從業者、有志于轉型App開發的程序員、App開發的業余愛好者,也可作為大中專院校與培訓機構的Android課程教材。
《Android Studio開發實戰:從零基礎到App上線》是一本非常實用的指導手冊,它幾乎包含了 Android Studio 所有的實用功能和操作技巧,適合放在你的電腦旁經常翻閱。本書以通俗易懂的語言描述工具的使用技巧,并且每個操作都有實例演示,讓讀者感覺是在跟一個有經驗的人聊天。本書以近 1500 張圖片詳細描述 Android Studio 的使用,是真正的圖文并茂。本書以解決問題為目的,講述如何使用工具來解決實際問題。本書專注于操作技巧的講解,對于 Android 開發的基礎知識略有提及,但不是本書的重點。本書以 macOS 上的操作為例進行演示,不同操作系統上 Android Studio 的操作差異不大,對于快捷鍵會區分 macOS / Windows / Linux。本書的大部分操作技巧同樣適用于 IntelliJ IDEA。
歐陽燊 同濟大學計算機科學與技術專業學士,浙江大學軟件工程專業工程碩士,先后就職于福建新大陸軟件工程公司、亞信科技有限公司杭州研發中心、福建福諾移動通信技術有限公司,歷任系統分析師、高級軟件工程師。具有12年以上軟件開發經驗,熟悉C/C 、Java及相關軟件架構,兩年Android開發經驗,從事一款用戶量超千萬的App項目開發,對Android開發擁有豐富的實戰經驗。
目 錄
第1章 Android Studio環境搭建 1
1.1 Android Studio簡介 2
1.2 Android Studio的安裝 2
1.2.1 開發機配置要求 2
1.2.2 安裝依賴的軟件 3
1.2.3 安裝Android Studio 5
1.3 運行小應用Hello World 7
1.3.1 創建新項目 7
1.3.2 編譯項目/模塊 10
1.3.3 創建模擬器 10
1.3.4 在模擬器上運行App 11
1.4 App的工程結構 12
1.4.1 工程目錄說明 12
1.4.2 編譯配置文件build.gradle 13
1.4.3 App運行配置AndroidManifest.xml 15
1.4.4 在代碼中操縱控件 15
1.5 準備開始 17
1.5.1 使用快捷鍵 17
1.5.2 安裝SVN工具 18
1.5.3 安裝常用插件 19
1.5.4 導入ADT工程 21
1.6 小結 22
第2章 初級控件 23
2.1 屏幕顯示 24
2.1.1 像素 24
2.1.2 顏色 25
2.1.3 屏幕分辨率 26
2.2 簡單布局 27
2.2.1 視圖View的基本屬性 27
2.2.2 線性布局LinearLayout 30
2.2.3 滾動視圖ScrollView 32
2.3 簡單控件 34
2.3.1 文本視圖TextView 34
2.3.2 按鈕Button 38
2.3.3 圖像視圖ImageView 39
2.3.4 圖像按鈕ImageButton 43
2.4 圖形基礎 45
2.4.1 Drawable 46
2.4.2 狀態列表圖形 47
2.4.3 形狀圖形 48
2.4.4 九宮格圖片 51
2.5 實戰項目:簡單計算器 52
2.5.1 設計思路 53
2.5.2 小知識:日志Log/提示Toast 54
2.5.3 代碼示例 55
2.6 小結 58
第3章 中級控件 59
3.1 其他布局 60
3.1.1 相對布局RelativeLayout 60
3.1.2 框架布局FrameLayout 64
3.2 特殊按鈕 65
3.2.1 復選框CheckBox 65
3.2.2 開關按鈕Switch 66
3.2.3 單選按鈕RadioButton 67
3.3 適配視圖基礎 68
3.3.1 下拉框Spinner 68
3.3.2 數組適配器ArrayAdapter 69
3.3.3 簡單適配器SimpleAdapter 70
3.4 編輯框 71
3.4.1 文本編輯框EditText 72
3.4.2 自動完成編輯框AutoCompleteTextView 77
3.5 Activity基礎 78
3.5.1 Activity的生命周期 78
3.5.2 使用Intent傳遞消息 82
3.5.3 向下一個Activity傳遞參數 84
3.5.4 向上一個Activity返回參數 85
3.6 實戰項目:登錄App 88
3.6.1 設計思路 88
3.6.2 小知識:AlertDialog 89
3.6.3 代碼示例 91
3.7 小結 94
第4章 數據存儲 95
4.1 共享參數SharedPreferences 96
4.1.1 基本用法 96
4.1.2 實現記住密碼功能 97
4.2 數據庫SQLite 98
4.2.1 SQLite的基本用法 98
4.2.2 SQLiteOpenHelper 100
4.2.3 優化記住密碼功能 106
4.3 SD卡文件操作 108
4.3.1 SD卡的基本操作 108
4.3.2 文本文件讀寫 110
4.3.3 圖片文件讀寫 111
4.4 Application基礎 112
4.4.1 Application的生命周期 112
4.4.2 利用Application操作全局變量 113
4.5 實戰項目:購物車 115
4.5.1 設計思路 115
4.5.2 小知識:菜單Menu 116
4.5.3 代碼示例 119
4.6 小結 125
第5章 高級控件 126
5.1 日期時間控件 127
5.1.1 日期選擇器DatePicker 127
5.1.2 時間選擇器TimePicker 128
5.2 列表類視圖 129
5.2.1 基本適配器BaseAdapter 129
5.2.2 列表視圖ListView 133
5.2.3 網格視圖GridView 138
5.3 翻頁類視圖 142
5.3.1 翻頁視圖ViewPager 142
5.3.2 翻頁標題欄PagerTitleStrip/PagerTabStrip 145
5.3.3 簡單的啟動引導頁 147
5.4 碎片Fragment 150
5.4.1 靜態注冊 150
5.4.2 動態注冊/碎片適配器FragmentStatePagerAdapter 154
5.4.3 改進的啟動引導頁 157
5.5 Broadcast基礎 159
5.5.1 發送/接收臨時廣播 159
5.5.2 定時器AlarmManager 162
5.6 實戰項目:日歷/日程表 163
5.6.1 設計思路 163
5.6.2 小知識:震動器Vibrator 165
5.6.3 代碼示例 165
5.7 小結 170
第6章 自定義控件 171
6.1 自定義視圖 172
6.1.1 聲明屬性 172
6.1.2 構造對象 175
6.1.3 測量尺寸 176
6.1.4 繪制視圖 179
6.2 自定義動畫 184
6.2.1 任務Runnable 184
6.2.2 下拉刷新動畫 185
6.2.3 圓弧進度動畫 186
6.3 自定義對話框 190
6.3.1 對話框Dialog 190
6.3.2 改進的日期對話框 191
6.3.3 自定義多級對話框 195
6.4 自定義通知欄 195
6.4.1 通知推送Notification 195
6.4.2 進度條ProcessBar 198
6.4.3 遠程視圖RemoteViews 199
6.5 Service基礎 202
6.5.1 Service的生命周期 203
6.5.2 推送服務到前臺 207
6.6 實戰項目:手機安全助手 210
6.6.1 設計思路 210
6.6.2 小知識:應用包管理PackageManager 211
6.6.3 代碼示例 213
6.7 小結 216
第7章 組合控件 217
7.1 標簽欄 218
7.1.1 標簽按鈕 218
7.1.2 實現底部標簽欄 219
7.2 導航欄 228
7.2.1 工具欄Toolbar 228
7.2.2 溢出菜單OverflowMenu 230
7.2.3 搜索框SearchView 232
7.2.4 標簽布局TabLayout 235
7.3 橫幅條 240
7.3.1 自定義指示器 241
7.3.2 實現橫幅輪播Banner 243
7.4 增強型列表 247
7.4.1 循環視圖RecyclerView 247
7.4.2 布局管理器LayoutManager 252
7.4.3 動態更新循環視圖 256
7.5 實戰項目:仿淘寶主頁 258
7.5.1 設計思路 258
7.5.2 小知識:下拉刷新SwipeRefreshLayout 259
7.5.3 代碼示例 262
7.6 小結 266
第8章 調試與上線 267
8.1 調試工作 268
8.1.1 模擬器調試 268
8.1.2 真機調試 272
8.1.3 導出APK安裝包 274
8.2 準備上線 276
8.2.1 版本設置 276
8.2.2 上線模式 277
8.2.3 數據加密 281
8.3 安全加固 289
8.3.1 反編譯 289
8.3.2 代碼混淆 291
8.3.3 第三方加固及重簽名 294
8.4 到應用商店 296
8.4.1 注冊開發者賬號 296
8.4.2 創建并提交應用 297
8.5 小結 299
第9章 設備操作 300
9.1 攝像頭 301
9.1.1 表面視圖SurfaceView 301
9.1.2 使用Camera拍照 303
9.1.3 紋理視圖TextureView 308
9.1.4 使用Camera 2拍照 309
9.2 麥克風 311
9.2.1 拖動條SeekBar 312
9.2.2 音量控制 313
9.2.3 錄音與播音 314
9.2.4 錄像與放映 322
9.3 傳感器 326
9.3.1 傳感器的種類 327
9.3.2 加速度傳感器 328
9.3.3 指南針 330
9.3.4 計步器和感光器 333
9.4 手機定位 334
9.4.1 開啟定位功能 334
9.4.2 獲取定位信息 337
9.5 實戰項目:仿微信的發現功能 341
9.5.1 設計思路 341
9.5.2 小知識:衛星導航 343
9.5.3 代碼示例 345
9.6 小結 351
第10章 網絡通信 352
10.1 多線程 353
10.1.1 消息傳遞Message 353
10.1.2 進度對話框ProgressDialog 356
10.1.3 異步任務AsyncTask 359
10.1.4 異步服務IntentService 365
10.2 HTTP接口訪問 367
10.2.1 網絡連接檢查 367
10.2.2 移動數據格式JSON 369
10.2.3 HTTP接口調用 371
10.2.4 HTTP圖片獲取 376
10.3 上傳和下載 378
10.3.1 下載管理器DownloadManager 378
10.3.2 文件對話框 384
10.3.3 文件上傳 385
10.4 套接字Socket 389
10.4.1 網絡地址InetAddress 389
10.4.2 Socket通信 390
10.5 實戰項目:仿手機QQ的聊天功能 394
10.5.1 設計思路 394
10.5.2 小知識:可折疊列表視圖ExpandableListView 397
10.5.3 代碼示例 401
10.6 小結 407
第11章 事件 408
11.1 按鍵事件 409
11.1.1 檢測軟鍵盤 409
11.1.2 檢測物理按鍵 411
11.1.3 音量調節對話框 413
11.2 觸摸事件 417
11.2.1 手勢事件的分發流程 417
11.2.2 手勢事件處理MotionEvent 421
11.2.3 手寫簽名 424
11.3 手勢檢測 426
11.3.1 手勢檢測器GestureDetector 426
11.3.2 飛掠視圖ViewFlipper 428
11.3.3 手勢控制橫幅輪播 431
11.4 手勢沖突處理 435
11.4.1 上下滾動與左右滑動的沖突處理 435
11.4.2 內部滑動與翻頁滑動的沖突處理 438
11.5 實戰項目:摳圖神器——美圖變變 443
11.5.1 設計思路 443
11.5.2 小知識:圖像的基本加工 444
11.5.3 代碼示例 445
11.6 小結 451
第12章 動畫 452
12.1 幀動畫 453
12.1.1 幀動畫的實現 453
12.1.2 顯示GIF動畫 455
12.1.3 淡入淡出動畫 456
12.2 補間動畫 457
12.2.1 補間動畫的種類 458
12.2.2 補間動畫的原理 462
12.2.3 集合動畫 465
12.2.4 在飛掠橫幅中使用補間動畫 466
12.3 屬性動畫 469
12.3.1 屬性動畫的用法 469
12.3.2 屬性動畫組合 472
12.3.3 插值器和估值器 473
12.4 動畫的實現手段 477
12.4.1 使用延時重繪 477
12.4.2 設置狀態參數 478
12.4.3 滾動器Scroller 479
12.5 實戰項目:仿QQ空間的動感影集 481
12.5.1 設計思路 481
12.5.2 小知識:畫布的繪圖層次 482
12.5.3 代碼示例 486
12.6 小結 492
第13章 多媒體 493
13.1 相冊 494
13.1.1 畫廊Gallery 494
13.1.2 圖像切換器ImageSwitcher 496
13.1.3 圖片查看器——青青相冊 499
13.2 視頻播放 502
13.2.1 視頻視圖VideoView 503
13.2.2 媒體控制條MediaController 505
13.2.3 影視播放器——愛看劇場 507
13.3 內容提供與處理 514
13.3.1 內容提供器ContentProvider 515
13.3.2 內容解析器ContentResolver 517
13.3.3 內容觀察器ContentObserver 521
13.4 實戰項目:音樂播放器——浪花音樂 524
13.4.1 設計思路 524
13.4.2 小知識:可變字符串SpannableString 526
13.4.3 代碼示例 529
13.5 小結 537
第14章 融合技術 538
14.1 網頁集成 539
14.1.1 資產管理器AssetManager 539
14.1.2 網頁視圖WebView 540
14.1.3 簡單瀏覽器 542
14.2 JNI開發 549
14.2.1 NDK環境搭建 550
14.2.2 創建JNI接口 552
14.2.3 JNI實現加解密 556
14.3 局域網共享 559
14.3.1 無線網絡管理器WifiManager 559
14.3.2 藍牙BlueTooth 560
14.4 實戰項目:WIFI共享器 570
14.4.1 設計思路 570
14.4.2 小知識:NetBIOS協議 571
14.4.3 代碼示例 574
14.5 小結 582
第15章 第三方開發包 583
15.1 地圖SDK 584
15.1.1 查看簽名信息 584
15.1.2 百度地圖 586
15.1.3 高德地圖 591
15.2 分享SDK 596
15.2.1 QQ分享 596
15.2.2 微信分享 598
15.3 支付SDK 602
15.3.1 支付寶支付 603
15.3.2 微信支付 604
15.4 語音SDK 606
15.4.1 &
第13章 多 媒 體本章介紹App開發常見的多媒體技術,主要包括如何使用各種圖像控件實現自定義相冊、如何使用視頻相關控件實現視頻播放器,另外介紹四大組件之一的ContentProvider的基本概念與常見用法。結合本章所學的知識演示一個實戰項目“音樂播放器——浪花音樂”的設計與實現。13.1 相 冊本節介紹自定義相冊的實現過程,首先說明使用畫廊或循環視圖如何實現簡單相冊;接著闡述使用圖像切換器如何實現相冊的左右滑動功能;然后分別介紹卡片視圖與調色板的用法,并結合上述圖像控件完成一個圖片查看器——青青相冊。13.1.1 畫廊Gallery前幾章使用文件對話框打開圖片時只能看到圖片的文件名,看不到圖片的縮略圖,對用戶來說很不方便,因為光看文件名怎么知道這張圖片什么模樣呢?如果是在電腦上,就可以查看一組圖片的縮略圖列表,很容易找到想要的圖片。在手機上可以使用相應的圖像控件做出縮略圖展示的相冊效果。畫廊Gallery是專門用于展示圖片列表的控件,左右滑動手勢即可展示內嵌的圖片列表,畫面效果類似于一個平面萬花筒。盡管Android將Gallery標記為Deprecation(表示已廢棄),建議開發者采用HorizontalScrollView或ViewPager代替,不過Gallery用來輪播圖片是一個挺好的選擇。不妨了解一下Gallery控件,并結合其他控件加深對圖像開發的理解。下面是Gallery的常用方法說明。? setSpacing:設置圖片之間的間隔大小,對應的XML屬性是spacing。? setUnselectedAlpha:設置未選定圖片的透明度,對應的XML屬性是unselectedAlpha。取值范圍為0.0~1.0,0.0表示透明,1.0表示不透明。? setAdapter:設置畫廊的適配器。? getSelectedItemId:獲取當前選中的視圖序號。? setSelection:設置當前選中第幾個視圖。? setOnItemClickListener:設置單項的點擊監聽器。使用畫廊看起來很簡單,接下來試著用Gallery結合ImageView實現觀看畫廊的相冊效果。首先在布局文件中放置一個框架布局FrameLayout,里面放一個畫廊控件與一個圖像視圖控件,ImageView設置為充滿整個屏幕,Gallery放在屏幕下方;然后監聽Gallery控件的單項點擊事件,當用戶點擊指定圖片項時,使用ImageView控件填充該圖片,也就是點小圖看大圖。下面是通過Gallery與ImageView實現簡單相冊的代碼:public class GalleryActivity extends AppCompatActivity implements OnItemClickListener { private ImageView iv_gallery; private Gallery gl_gallery; private int[] mImageRes = { R.drawable.scene1, R.drawable.scene2, R.drawable.scene3, R.drawable.scene4, R.drawable.scene5, R.drawable.scene6 };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gallery); iv_gallery = (ImageView) findViewById(R.id.iv_gallery); iv_gallery.setImageResource(mImageRes[0]); int dip_pad = Utils.dip2px(this, 20); gl_gallery = (Gallery) findViewById(R.id.gl_gallery); gl_gallery.setPadding(0, dip_pad, 0, dip_pad); gl_gallery.setSpacing(dip_pad); gl_gallery.setUnselectedAlpha(0.5f); gl_gallery.setAdapter(new GalleryAdapter(this, mImageRes)); gl_gallery.setOnItemClickListener(this); }
@Override public void onItemClick(AdapterView parent, View view, int position, long id) { iv_gallery.setImageResource(mImageRes[position]); }}Gallery相冊的畫面效果如圖13-1和圖13-2所示。其中,圖13-1所示為展示相冊及時張圖片時的畫面;圖13-2所示為點擊第二張小圖時,屏幕展示第二張大圖的畫面。 圖13-1 畫廊展示及時張圖片 圖13-2 畫廊展示第二張圖片如果想用其他控件替代Gallery,就可以考慮使用功能強大的循環視圖RecyclerView。具體實現時主要是定義一個水平方向的線性布局管理器,然后通過適配器填入圖片列表。使用RecyclerView與ImageView實現相冊的代碼很簡單,舉例如下:public class RecyclerViewActivity extends AppCompatActivity implements OnItemClickListener { private ImageView iv_photo; private RecyclerView rv_photo; private int[] mImageRes = { R.drawable.scene1, R.drawable.scene2, R.drawable.scene3, R.drawable.scene4, R.drawable.scene5, R.drawable.scene6 };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycler_view); iv_photo = (ImageView) findViewById(R.id.iv_photo); iv_photo.setImageResource(mImageRes[0]); rv_photo = (RecyclerView) findViewById(R.id.rv_photo); LinearLayoutManager manager = new LinearLayoutManager(this); manager.setOrientation(LinearLayout.HORIZONTAL); rv_photo.setLayoutManager(manager); PhotoAdapter adapter = new PhotoAdapter(this, mImageRes); adapter.setOnItemClickListener(this); rv_photo.setAdapter(adapter); rv_photo.setItemAnimator(new DefaultItemAnimator()); rv_photo.addItemDecoration(new SpacesItemDecoration(20)); }
@Override public void onItemClick(View view, int position) { iv_photo.setImageResource(mImageRes[position]); rv_photo.scrollToPosition(position); }}使用RecyclerView方式實現的相冊效果如圖13-3和圖13-4所示。其中,圖13-3所示為展示相冊第3張圖片時的畫面;圖13-4所示為點擊第4張小圖時,屏幕展示第4張大圖的畫面。 圖13-3 循環視圖展示第3張圖片 圖13-4 循環視圖展示第4張圖片13.1.2 圖像切換器ImageSwitcher可能讀者已經發現,前面Gallery相冊在切換大圖時比較生硬,前后兩張圖片閃一下就切過去了,用戶體驗不夠友好。有沒有辦法讓圖片切換自然一些呢,比如通過漸變動畫的方式?答案肯定是有的,就是把占據整個屏幕的圖像視圖ImageView換成圖像切換器ImageSwitcher,然后通過ImageSwitcher實現前后圖片的切換動畫。ImageSwitcher繼承自視圖動畫器ViewAnimator,用于承載前后兩個圖像的變換動畫;與之對應的是,文本切換器TextSwitcher承載前后兩個文本的變換動畫;第11章介紹的飛掠視圖ViewFlipper是從ViewAnimator派生而來,讀者已經知道它用來承載前后兩個視圖的變換動畫。下面介紹ImageSwitcher的常用方法。? setFactory:設置一個視圖工廠。該視圖工廠由ViewFactory派生而來,需重寫makeView方法返回工廠的具體視圖。對于ImageSwitcher來說,工廠返回的是ImageView對象。? setImageResource:設置當前圖像的資源ID。該方法與下面的setImageDrawable方法和setImageURI方法為三選一操作,調用了其中一個方法,就無須調用另外兩個方法。? setImageDrawable:設置當前圖像的Drawable對象。? setImageURI:設置當前圖像的URI地址。? setInAnimation:設置后一個圖像的進入動畫。? setOutAnimation:設置前一個圖像的退出動畫。這里運用的動畫技術跟第11章和第12章的飛掠視圖類似。首先,對前后圖片的切換動畫可以事先設置好集合動畫,通過setInAnimation和setOutAnimation方法完成動畫調用;其次,前后圖片的切換操作不但可由Gallery控件的點擊操作出發,而且可由手勢的左滑和右滑操作觸發,這要借助于手勢檢測器GestureDetector,通過檢測左滑手勢和右滑手勢自動輪播 圖片。按照以上的設計思路使用ImageSwitcher實現相冊切換動畫的代碼如下: public void onItemClick(AdapterView parent, View view, int position, long id) { is_switcher.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in)); is_switcher.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_out)); is_switcher.setImageResource(mImageRes[position]); }
正品沒毛病,當當靠譜
挺好用的,寫的也詳細
不錯,趕上雙十一,還有優惠。
感覺不錯繼續購買
非常實用,值得贊。
書不錯。挺新噠。剛剛出版
不適合初學者,要買的注意了!
案例下載方便,正在測試。
感覺還可以,正在使用,整體還可以把
還是很不錯的,好好學習!嗯呃呃呃呃呃呃
物流快,書質量看著不錯(還沒有拆封)
工具書,參考用。
書紙質有點差,其他還好,內容比較務實
絕佳精品之作,版本新,寫得到位,易上手,十幾個案例涵蓋當前熱點應用。
非常不錯,學到很多
歐陽老師的書,寫的透徹. 值得推薦
包裝很差,太薄,拿到手,書都變形有擠壓
內容很豐富,案例也很實用,而且是國人寫的,親切易懂,挺好
絕佳精品之作,版本新,寫得到位,易上手,十幾個案例涵蓋當前熱點應用。