開 篇
第1章 繪圖基礎 2
1.1 基本圖形繪製 2
1.1.1 概述 2
1.1.2 畫筆的基本設置 4
1.1.3 Canvas使用基礎 6
1.1.4 Color 10
1.2 路徑 11
1.2.1 概述 11
1.2.2 直綫路徑 12
1.2.3 弧綫路徑 12
1.3 Region 14
1.3.1 構造Region 14
1.3.2 區域相交 16
1.4 Canvas(畫布) 19
1.4.1 Canvas變換 19
1.4.2 畫布的保存與恢復 23
動 畫 篇
第2章 視圖動畫 26
2.1 視圖動畫標簽 26
2.1.1 概述 26
2.1.2 scale標簽 28
2.1.3 alpha標簽 34
2.1.4 rotate標簽 35
2.1.5 translate標簽 36
2.1.6 set標簽 37
2.2 視圖動畫的代碼實現 38
2.2.1 概述 38
2.2.2 ScaleAnimation 38
2.2.3 AlphaAnimation 40
2.2.4 RotateAnimation 40
2.2.5 TranslateAnimation 41
2.2.6 AnimationSet 42
2.2.7 Animation 43
2.3 插值器初探 44
2.3.1 AccelerateDecelerateInterpolator 45
2.3.2 AccelerateInterpolator 47
2.3.3 DecelerateInterpolator 48
2.3.4 LinearInterpolator 49
2.3.5 BounceInterpolator 49
2.3.6 AnticipateInterpolator 50
2.3.7 OvershootInterpolator 51
2.3.8 AnticipateOvershootInterpolator 53
2.3.9 CycleInterpolator 54
2.4 動畫示例 55
2.4.1 鏡頭由遠及近效果 55
2.4.2 加載框效果 56
2.4.3 掃描動畫 57
2.5 逐幀動畫 60
2.5.1 XML實現 61
2.5.2 代碼實現 66
第3章 屬性動畫 68
3.1 ValueAnimator的基本使用 68
3.1.1 概述 68
3.1.2 ValueAnimator的簡單使用 71
3.1.3 常用函數 74
3.1.4 示例:彈跳加載中效果 83
3.2 自定義插值器與Evaluator 86
3.2.1 自定義插值器 87
3.2.2 Evaluator 90
3.3 ValueAnimator進階——ofObject 96
3.3.1 概述 96
3.3.2 示例:拋物動畫 98
3.4 ObjectAnimator 101
3.4.1 概述 101
3.4.2 ObjectAnimator動畫原理 106
3.4.3 自定義ObjectAnimator屬性 107
3.4.4 何時需要實現對應屬性的get函數 110
3.4.5 常用函數 112
3.5 組閤動畫——AnimatorSet 113
3.5.1 playSequentially()與playTogether()函數 113
3.5.2 AnimatorSet.Builder 118
3.5.3 AnimatorSet監聽器 119
3.5.4 常用函數 122
3.5.5 示例:路徑動畫 126
3.6 Animator動畫的XML實現 132
3.6.1 animator標簽 132
3.6.2 objectAnimator標簽 134
第4章 屬性動畫進階 136
4.1 PropertyValuesHolder與Keyframe 136
4.1.1 PropertyValuesHolder 137
4.1.2 Keyframe 140
4.1.3 PropertyValuesHolder之其他函數 148
4.1.4 示例:電話響鈴效果 148
4.2 ViewPropertyAnimator 150
4.2.1 概述 150
4.2.2 常用函數 150
4.2.3 性能考量 153
4.3 為ViewGroup內的組件添加動畫 153
4.3.1 animateLayoutChanges屬性 154
4.3.2 LayoutTransition 157
4.3.3 其他函數 161
4.4 開源動畫庫NineOldAndroids 163
4.4.1 NineOldAndroids中的ViewPropertyAnimator 164
4.4.2 NineOldAndroids中的ViewHelper 164
第5章 動畫進階 168
5.1 利用PathMeasure實現路徑動畫 168
5.1.1 初始化 168
5.1.2 簡單函數使用 169
5.1.3 getSegment()函數 171
5.1.4 getPosTan()函數 177
5.1.5 getMatrix()函數 181
5.1.6 示例:支付寶支付成功動畫 182
5.2 SVG動畫 184
5.2.1 概述 184
5.2.2 vector標簽與圖像顯示 186
5.2.3 動態Vector 197
5.2.4 示例:輸入搜索動畫 198
繪 圖 篇
第6章 Paint基本使用 204
6.1 硬件加速 204
6.1.1 概述 204
6.1.2 軟件繪製與硬件加速的區彆 204
6.1.3 禁用GPU硬件加速的方法 206
6.2 文字 207
6.2.1 概述 207
6.2.2 繪圖四綫格與FontMetrics 210
6.2.3 常用函數 214
6.2.4 示例:定點寫字 216
6.3 Paint常用函數 218
6.3.1 基本設置函數 218
6.3.2 字體相關函數 221
第7章 繪圖進階 223
7.1 貝濟埃麯綫 223
7.1.1 概述 223
7.1.2 貝濟埃麯綫之quadTo 227
7.1.3 貝濟埃麯綫之rQuadTo 234
7.1.4 示例:波浪效果 235
7.2 setShadowLayer與陰影效果 238
7.2.1 setShadowLayer()構造函數 238
7.2.2 清除陰影 240
7.2.3 示例:給文字添加陰影 242
7.3 BlurMaskFilter發光效果與圖片陰影 243
7.3.1 概述 243
7.3.2 給圖片添加純色陰影 245
7.4 Shader與BitmapShader 248
7.4.1 Shader概述 248
7.4.2 BitmapShader的基本用法 249
7.4.3 示例一:望遠鏡效果 254
7.4.4 示例二:生成不規則頭像 256
7.5 Shader之LinearGradient 257
7.5.1 概述 257
7.5.2 示例:閃光文字效果 261
7.6 Shader之RadialGradient 264
7.6.1 雙色漸變 264
7.6.2 多色漸變 266
7.6.3 TileMode填充模式 267
第8章 混閤模式 269
8.1 混閤模式之AvoidXfermode 269
8.1.1 混閤模式概述 269
8.1.2 AvoidXfermode 270
8.1.3 AvoidXfermode繪製原理 274
8.1.4 AvoidXfermode之Mode.AVOID 275
8.2 混閤模式之PorterDuffXfermode 276
8.2.1 PorterDuffXfermode概述 276
8.2.2 顔色疊加相關模式 279
8.3 PorterDuffXfermode之源圖像模式 285
8.3.1 Mode.SRC 285
8.3.2 Mode.SRC_IN 285
8.3.3 Mode.SRC_OUT 288
8.3.4 Mode.SRC_OVER 293
8.3.5 Mode.SRC_ATOP 293
8.4 目標圖像模式與其他模式 294
8.4.1 目標圖像模式 294
8.4.2 其他模式——Mode.CLEAR 303
8.4.3 模式總結 303
第9章 Canvas與圖層 305
9.1 獲取Canvas對象的方法 305
9.1.1 方法一:重寫onDraw()、dispatchDraw()函數 305
9.1.2 方法二:使用Bitmap創建 306
9.1.3 方法三:調用SurfaceHolder.lockCanvas()函數 307
9.2 圖層與畫布 307
9.2.1 saveLayer()函數 307
9.2.2 畫布與圖層 312
9.2.3 saveLayer()和saveLayerAlpha()函數的用法 312
9.3 Flag的具體含義 316
9.3.1 Flag之MATRIX_SAVE_FLAG 316
9.3.2 Flag之CLIP_SAVE_FLAG 318
9.3.3 Flag之FULL_COLOR_LAYER_SAVE_FLAG和HAS_ALPHA_
LAYER_SAVE_FLAG 320
9.3.4 Flag之CLIP_TO_LAYER_SAVE_FLAG 323
9.3.5 Flag之ALL_SAVE_FLAG 325
9.4 恢復畫布 325
9.4.1 restoreToCount(int count) 325
9.4.2 restore()與restoreToCount(int count)的關係 328
第10章 Android畫布 330
10.1 ShapeDrawable 331
10.1.1 shape標簽與GradientDrawable 331
10.1.2 ShapeDrawable的構造函數 333
10.1.3 常用函數 345
10.1.4 自定義Drawable 351
10.1.5 Drawable與Bitmap對比 357
10.2 Bitmap 359
10.2.1 概述 360
10.2.2 創建Bitmap方法之一:BitmapFactory 362
10.2.3 BitmapFactory.Options 369
10.2.4 創建Bitmap方法之二:Bitmap靜態方法 377
10.2.5 常用函數 384
10.2.6 常見問題 401
10.3 SurfaceView 408
10.3.1 概述 408
10.3.2 SurfaceView的基本用法 409
10.3.3 SurfaceView雙緩衝技術 421
第11章 Matrix與坐標變換 442
視 圖 篇
第12章 封裝控件 444
12.1 自定義屬性與自定義Style 444
12.1.1 概述 444
12.1.2 declare-styleable標簽的使用方法 444
12.1.3 在XML中使用自定義的屬性 446
12.1.4 在代碼中獲取自定義屬性的值 447
12.1.5 declare-styleable標簽其他屬性的用法 448
12.2 測量與布局 452
12.2.1 ViewGroup繪製流程 452
12.2.2 onMeasure()函數與MeasureSpec 452
12.2.3 onLayout()函數 455
12.2.4 獲取子控件margin值的方法 460
12.3 實現FlowLayout容器 466
12.3.1 XML布局 466
12.3.2 提取margin值與重寫onMeasure()函數 468
第13章 控件高級屬性 475
13.1 GestureDetector手勢檢測 475
13.1.1 概述 475
13.1.2 GestureDetector.OnGestureListener接口 475
13.1.3 GestureDetector.OnDoubleTapListener接口 479
13.1.4 GestureDetector.SimpleOnGestureListener類 483
13.1.5 onFling()函數的應用——識彆是嚮左滑還是嚮右滑 485
13.2 Window與WindowManager 486
13.2.1 Window與WindowManager的關係 486
13.2.2 示例:騰訊手機管傢懸浮窗的小火箭效果 487
· · · · · · (
收起)