《Android自定义控件开发入门与实战》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:启舰
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2018
  • ISBN:9787121345562
  • 页数:491 页
图书介绍:在Android中,官方提供的控件是非常有限的,而我们所面临的需求却是多样的。大家在工作中难免会接触到自定义控件的需求,但系统讲解自定义控件知识的书籍却少之又少。不仅因为自定义控件涉及的知识丰富、繁杂,而且与动画和色彩相关的知识很难在纸张上表现出来。 本书从自定义控件的动画、绘图、视图三方面入手,分别讲解与自定义控件相关的各种知识,给大家系统地梳理相关知识点,并且通过翔实的案例讲解每个知识点在现实工作中所能实现的功能。

开篇 2

第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

动画篇 26

第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 LinearInterp olator 49

2.3.5 BounceInterpolator 49

2.3.6 Antic ipateInterpolator 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 pIaySequentially()与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

绘图篇 204

第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 创建B itmap方法之一: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

视图篇 444

第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