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