第1章 UI布局 1
001 使用纯Java代码创建应用UI界面 1
002 使用自定义View代替布局文件 2
003 使用TableLayout布局多个输入框 4
004 使用TextInputLayout管理输入框提示 5
005 使用GridLayout创建计算器按键布局 7
006 使用RelativeLayout按照相邻关系布局 9
007 使用ConstraintLayout在右下角布局 10
008 使用TableLayout拉伸控件填充容器 12
009 使用TableLayout缩小控件适应容器 12
010 使用LinearLayout纵向居中对齐控件 14
011 使用LinearLayout按权重分配控件空间 16
012 使用ConstraintLayout平分剩余空间 17
013 使用ConstraintLayout无间隙布局控件 18
014 使用TabLayout和适配器创建选项卡 19
015 使用TabLayout和Fragment创建选项卡 22
016 使用FrameLayout创建纵向选项卡 25
017 使用TabHost创建横向选项卡 28
018 使用AbsoluteLayout实现平移控件 29
019 使用FrameLayout实现闪烁控件 31
020 自定义FrameLayout创建翻页卷边动画 34
第2章 常用控件 36
021 在TextView中创建空心文字 36
022 在TextView中实现上文下图的布局 37
023 在TextView中为文本添加超链接 38
024 在自定义View中实现垂直滚动文本 39
025 在EditText中指定输入法的数字软键盘 41
026 禁止在EditText中插入非字符表情符号 41
027 使用AutoCompleteTextView实现自动提示 43
028 使用SearchView和ListView实现过滤输入 44
029 在EditText右端设置输入提示内容和图标 45
030 通过自定义Shape创建不同的圆角按钮 46
031 通过设置背景图像创建立体的质感按钮 49
032 使用FloatingActionButton创建悬浮按钮 50
033 以全屏效果显示在ImageView中的图像 51
034 在自定义ImageView中显示圆形图像 52
035 使用单指滑动拖曳ImageView的图像 54
036 使用Gallery实现滑动浏览多幅图像 56
037 使用SwipeRefreshLayout切换图像 57
038 使用AdapterViewFlipper自动播放图像 58
039 使用两幅图像定制ToggleButton开关状态 60
040 使用GridView创建网格显示多幅图像 62
041 使用ViewPager实现缩放轮播多幅图像 64
042 使用Handler实现自动轮播ViewPager 67
043 使用ViewPager实现苹果风格的cover flow 69
044 使用RecyclerView创建水平瀑布流图像 72
045 以网格或列表显示RecyclerView列表项 74
046 使用RecyclerView仿表情包插入输入框 77
047 使用CardView显示RecyclerView列表项 79
048 在ListView中创建图文结合列表项 82
049 使用ListPopupWindow实现下拉选择 84
050 使用Elevation创建阴影扩散的控件 85
051 在单击CheckBox时显示波纹扩散效果 86
052 使用自定义形状定制Switch开关状态 88
053 自定义selector以渐变前景切换控件 90
054 使用ViewSwitcher平滑切换两个View 92
055 使用SlidingDrawer实现抽屉式滑动 93
056 自定义ScrollView实现下拉回弹动画 96
057 使用CollapsingToolbarLayout实现滚动折叠 98
058 使用BottomNavigationView实现底部导航 99
059 在ProgressBar上同时显示两种进度 101
060 使用ViewOutlineProvider创建圆角控件 103
061 使用AnalogClock创建自定义时钟 104
062 在TextClock中定制日期格式 105
063 使用RatingBar实现星级评分 106
064 在登录窗口中使用SeekBar实现手动校验 107
第3章 文字 110
065 使用ScaleXSpan创建扁平风格的文字 110
066 使用MaskFilterSpan实现文字边缘模糊 111
067 使用MaskFilterSpan实现文字中心镂空 112
068 使用MaskFilterSpan实现文字整体模糊 113
069 使用MaskFilterSpan模糊多个字符串 114
070 使用BulletSpan在文本首字前添加小圆点 115
071 使用StrikethroughSpan添加文字删除线 116
072 使用URLSpan为部分内容添加超链接 117
073 使用ImageSpan同时显示QQ表情和文字 119
074 使用StyleSpan实现以粗斜体显示文字 120
075 使用SuperscriptSpan绘制勾股定理公式 121
076 使用SubscriptSpan绘制硫酸亚铁分子式 122
077 使用TypefaceSpan定制文本的部分内容 123
078 使用ForegroundColorSpan创建光照文字 125
079 使用BlurMaskFilter创建阴影扩散文字 126
080 使用EmbossMaskFilter创建浮雕文字 127
081 通过自定义View在半圆弧上绘制文字 128
082 通过自定义View在圆弧上滚动文字 130
083 通过自定义View绘制渐变色的文字 132
084 通过自定义View绘制线条描边文字 133
085 通过自定义View绘制阴影扩散文字 134
086 加载字库文件显示自定义草书字体 135
087 加载字库文件显示自定义液晶字体 136
088 判断在一个字符串中是否包含汉字 137
第4章 图形和图像 138
089 在自定义View中绘制径向渐变的图形 138
090 在自定义View中实现图像波纹起伏效果 139
091 在自定义View中使用椭圆裁剪图像 141
092 通过PorterDuff模式增暗显示两幅图像 142
093 通过PorterDuff模式将图像裁剪成五角星 143
094 通过PorterDuff模式改变tint属性叠加效果 144
095 使用Region的DIFFERENCE实现抠图功能 145
096 使用ShapeDrawable裁剪三角形图像 146
097 使用ClipDrawable裁剪图像实现星级评分 147
098 使用自定义Drawable实现对图像进行圆角 149
099 使用Matrix实现按照指定方向倾斜图像 150
100 使用ColorMatrix为图像添加泛紫效果 151
101 使用ColorMatrix实现图像的加暗效果 152
102 通过自定义ColorMatrix调整图像蓝色色调 153
103 使用RenderScript实现高斯算法模糊图像 154
104 使用拉普拉斯模板实现图像的锐化特效 156
105 通过像素操作实现在图像上添加光照效果 158
106 通过像素操作使彩色图像呈现浮雕特效 159
107 使用BitmapShader实现文字线条图像化 161
108 使用BlurMaskFilter为图像添加轮廓线 162
109 使用PathDashPathEffect实现椭圆线条 163
110 使用SumPathEffect叠加多种路径特效 164
111 通过BitmapShader实现以图像填充椭圆 165
112 使用ComposeShader创建渐变图像 166
113 使用ImageView显示XML实现的矢量图形 168
114 使用BitmapFactory压缩图像的大小 169
115 在自定义类中使用Movie显示动态图像 170
116 通过使用图像作为画布创建带水印图像 172
117 通过操作根布局实现将屏幕内容保存为图像 174
118 通过手势变化实现平移旋转缩放图像 175
119 使用ThumbnailUtils提取大图像的缩略图 177
120 通过采用取模的方式实现轮流显示多幅图像 178
第5章 动画 180
121 使用ObjectAnimator创建上下振动动画 180
122 使用ObjectAnimator实现沿弧线路径平移 181
123 使用ObjectAnimator滚动显示多幅图像 182
124 使用ObjectAnimator实现图形数字形变 184
125 使用ObjectAnimator改变图像的色相值 186
126 使用AnimatorSet组合多个ObjectAnimator 188
127 使用TypeEvaluator实现颜色过渡动画 189
128 通过trimPathEnd实现动态生成手指图形 191
129 使用ValueAnimator动态改变扇形转角 193
130 使用ValueAnimator实现分段转圈动画 195
131 使用ValueAnimator在三维Z轴上平移图像 197
132 使用ValueAnimator实现起飞转平飞动画 198
133 自定义TypeEvaluator以GIF动画显示图像 199
134 使用Animation实现图像围绕自身中心旋转 201
135 自定义Animation实现旋转切换扑克牌正反面 202
136 使用AnimationSet实现组合多个不同的动画 204
137 使用Animation实现按照顺序显示网格Item 205
138 使用windowAnimations实现缩放对话框窗口 207
139 使用AnimationDrawable播放多幅图像 209
140 使用AnimationDrawable创建爆炸动画 211
141 使用RotateAnimation实现围绕自身中心旋转 213
142 使用AlphaAnimation创建淡入淡出动画 214
143 使用ScaleAnimation创建缩放图像动画 215
144 在ViewPager中实现上下滑动的转场动画 216
145 通过下拉手指实现两个Activity的相互切换 217
146 在应用启动时使用进场动画启动Activity 218
147 以左入右出的动画效果切换两个Activity 220
148 以收缩扩张的动画效果切换两个Activity 221
149 使用转场动画Explode切换两个Activity 223
150 使用转场动画Slide切换两个Activity 224
151 以指定位置的转场动画切换两个Activity 225
152 在切换Activity时叠加缩放动画和转场动画 227
153 在切换Activity的转场动画中共享多对元素 229
154 使用FragmentTransaction自定义转场动画 230
155 使用TransitionManager实现上下滑动动画 232
156 使用TransitionManager实现围绕Y轴旋转 234
157 使用TransitionManager实现Fade动画效果 235
158 使用TransitionManager组合多个不同动画 238
159 使用TransitionManager实现单布局过渡动画 240
160 使用TransitionManager实现平移过渡动画 241
161 使用TransitionManager实现缩放部分图像 243
162 使用TransitionManager实现矢量路径动画 244
163 使用TransitionManager同时实现多种动画 247
164 使用TransitionManager实现XML定制动画 248
165 使用TransitionManager指定控件执行动画 250
166 使用TransitionManager实现列表项滑入动画 251
167 使用TransitionManager实现弧线路径动画 252
168 使用TransitionManager实现裁剪区域动画 254
169 通过设置和获取控件的Tag确定动画过渡行为 255
170 在TransitionSet中指定多个动画的执行顺序 256
171 使用TransitionDrawable透明切换两幅图像 258
172 使用AnimatedVectorDrawable实现转圈动画 259
173 创建AnimatedVectorDrawableCompat动画 261
174 使用ViewPropertyAnimator创建多个动画 263
175 自定义selector实现以动画形式改变阴影大小 264
176 使用ripple标签创建中心波纹扩散动画 265
177 使用GLSurfaceView实现3D地球的自转 266
第6章 音频和视频 268
178 使用MediaPlayer播放本地mp3音乐文件 268
179 使用MediaPlayer播放本地mp4视频文件 269
180 使用MediaPlayer播放指定网址的音乐文件 270
181 使用滑块同步MediaPlayer播放音频的进度 273
182 使用滑块同步MediaPlayer播放视频的进度 275
183 使用MediaController创建视频播放控制栏 278
184 使用MediaMetadataRetriever实现视频截图 280
185 使用MediaMetadataRetriever获取视频缩略图 281
186 使用VideoView播放本地mp4视频文件 282
187 使用VideoView播放指定网址的视频文件 283
188 使用MediaRecorder录制音频文件 284
189 使用RemoteViews在通知栏上创建播放器 286
190 在使用SurfaceView播放视频时实现横屏显示 288
191 在选择音乐曲目窗口中选择音乐文件并播放 291
192 在RecyclerView中加载音乐文件并播放 292
193 依次播放在RecyclerView中的音乐文件 296
194 在ListView上加载手机外存的音乐文件 298
195 使用SoundPool播放较短的声音片段 300
196 使用AudioManager增大或减小音量 301
197 使用AudioManager播放系统预置的声音 303
198 使用AudioManager获取和设置铃声模式 304
第7章 文件和数据 306
199 使用JSONObject解析JSON字符串 306
200 使用JSONArray解析JSON字符串 307
201 使用JSONTokener解析JSON字符串 308
202 使用JsonReader解析JSON字符串 309
203 使用JSONStringer创建JSON字符串 311
204 使用JSONObject根据IP显示所在城市 312
205 使用Gson将数组转换成JSON字符串 314
206 使用Gson解析JSON字符串 315
207 使用XmlPullParser解析城市天气数据 317
208 采用SAX方式解析XML文件内容 320
209 使用Pattern根据正则表达式校验手机号码 321
210 使用SharedPreferences保存账户和密码 323
211 使用ListPreference读写单选按钮值 324
212 在代码中获取CheckBoxPreference值 326
213 通过PreferenceScreen跳转到Wifi设置 327
214 使用Intent实现在Activity之间传递小图像 329
215 使用Intent在Activity之间传递图像和文本 330
216 使用Intent在Activity之间传递集合数据 332
217 在Intent传递数据时使用Bundle携带数组 333
218 使用Intent在Service和Activity之间传递数据 335
219 使用FileInputStream和FileOutputStream读取和保存文本文件 337
220 将浮雕风格的特效文字保存为图像文件 338
221 在SD卡上将Bitmap保存为PNG图像文件 339
222 从手机相册中选择图像文件并裁剪头像 341
223 在ListView上加载手机外存的图像文件 342
224 使用DownloadManager下载网络文件 344
225 使用RandomAccessFile实现断点续传下载 346
226 使用HttpURLConnection下载图像文件 348
第8章 系统和设备 351
227 使用QuickContactBadge访问联系人 351
228 使用ContentProviderOperation增加联系人 352
229 使用ContentProviderOperation修改联系人 354
230 使用ContentProviderOperation删除联系人 356
231 使用ContentResolver检测飞行模式的状态 358
232 使用ContentResoiver检测手机的时间格式 359
233 使用ContentResolver获取所有短信 359
234 使用ContentResolver获取通话记录 361
235 使用ContentResolver获取SD卡的文件 363
236 使用ContentResolver改变屏幕亮度值 365
237 使用ContentResolver设置屏幕亮度值 366
238 使用ContentResolver检测旋转屏幕功能 367
239 使用BroadcastReceiver监听来电电话号码 368
240 使用BroadcastReceiver判断手机电池是否正在充电 369
241 使用BroadcastReceiver监听屏幕开启或关闭 371
242 自定义BroadcastReceiver实现短信拦截 372
243 使用RingtoneManager设置手机闹钟铃声 373
244 使用RingtoneManager设置手机通知铃声 375
245 使用AlarmManager以指定时间执行操作 376
246 使用AudioManager获取和设置音量 377
247 使用PowerManager实现屏幕一直亮着 379
248 使用WallpaperManager设置壁纸 380
249 使用PackageManager获取支持分享的应用 381
250 使用WifiManager开启或关闭WiFi信号 382
251 使用WifiManager获取IP地址 384
252 使用ConnectivityManager判断网络状态 385
253 使用BluetoothAdapter打开或关闭蓝牙 386
254 使用LocationListener获取当前经纬度值 387
255 使用SensorManager获取传感器信息 390
256 使用传感器监测耳朵与手机听筒的距离 391
257 使用加速度传感器监听手机的三维变化 393
258 通过传感器实现自动进行横屏和竖屏切换 395
259 使用setRequestedOrientation()实现横屏 397
260 根据手机是横屏或是竖屏进行控件布局 398
261 使用FLAG_FULLSCREEN标志实现全屏显示 399
262 使用Display获取屏幕宽度和高度 401
263 使用StatFs获取内部总空间和可用空间大小 401
264 使用GestureDetector实现纵向滑动切换 403
265 自定义手机振动器(Vibrator)的振动模式 405
266 使用SurfaceView实现照相机的预览功能 406
267 使用Camera实现缩小和放大预览画面 408
268 使用Camera实现预览时摄像头手动对焦 409
269 从相册中选择图像并设置为手机壁纸 412
270 使用Runnable间隔执行重复的任务 413
271 使用Timer实现促销活动的倒计时功能 414
272 使用Runtime执行系统命令静默安装应用包 415
第9章 第三方SDK开发 419
273 使用腾讯SDK获取授权QQ账户的简介 419
274 使用腾讯SDK实现以第三方登录QQ账户 422
275 使用腾讯SDK将指定文本分享给QQ好友 423
276 使用腾讯SDK将本地图像发表到QQ空间 424
277 使用微信SDK将视频链接分享给微信好友 426
278 使用微信SDK将音乐链接分享到朋友圈 428
279 使用百度SDK根据起点和终点规划步行线路 429
280 使用百度SDK实现将驾车线路分享给好友 432
281 使用百度SDK调用百度地图App的驾车导航 434
282 使用百度SDK调用百度地图App的POI检索 436
283 使用百度SDK实现在地图中定位手机位置 437
284 使用百度SDK获取在地图上点击位置的地名 438
285 使用百度SDK在地图的城市之间绘制连线 440
286 使用百度SDK在地图上添加图文悬浮框 441
287 使用百度SDK在地图上添加淡入动画 442
288 使用百度SDK在地图上添加弹跳型动画 444
289 使用百度SDK在地图上查询指定城市兴趣点 445
290 使用百度SDK在地图上为行政区添加边界线 446
291 使用百度SDK在地图指定范围添加圆角矩形 448
292 使用百度SDK查询指定地点的热力图 449
293 使用百度SDK实现隐藏或显示地名标注信息 450
294 使用百度SDK实现以俯视角观察街道三维图 452
295 使用百度SDK实现根据经纬度计算两地距离 453
296 使用新浪SDK实现跳转到微博主页 454
297 使用新浪SDK获取授权微博账户的简介 456
298 使用新浪SDK将微博账户简介生成二维码 458
299 使用新浪SDK实现搜索指定关键字的微博 460
300 使用新浪SDK实现发布图像至微博 461