新書推薦:
《
股市趋势技术分析(原书第11版)
》
售價:HK$
221.8
《
汉匈战争全史
》
售價:HK$
99.7
《
恶的哲学研究(社会思想丛书)
》
售價:HK$
109.8
《
不止江湖
》
售價:HK$
98.6
《
天才留步!——从文艺复兴到新艺术运动(一本关于艺术天才的鲜活故事集,聚焦艺术史的高光时刻!)
》
售價:HK$
154.6
《
双城史
》
售價:HK$
110.9
《
冯友兰和青年谈心系列:不是问题的问题(哲学大师冯友兰和年轻人谈心,命运解读)
》
售價:HK$
55.8
《
月与蟹(青鲤文库)荣获第144届直木奖,天才推理作家经典作品全新译本。一部青春狂想曲,带你登上心理悬疑之巅。
》
售價:HK$
50.4
|
編輯推薦: |
1 本书从动画、绘图、视图三方面介绍Android自定义控件相关知识,内容系统全面,并配以翔实的案例。
2 Android自定义控件涉及动画和色彩,本书将图片地址制作成二维码,可供读者扫描观看。
3 本书适合初高级水平从业者系统学习,也适合高级水平从业者查漏补缺。
|
內容簡介: |
在Android中,官方提供的控件是非常有限的,而我们所面临的需求却是多样的。大家在工作中难免会接触到自定义控件的需求,但系统讲解自定义控件知识的书籍却少之又少。不仅因为自定义控件涉及的知识丰富、繁杂,而且与动画和色彩相关的知识很难在纸张上表现出来。本书从自定义控件的动画、绘图、视图三方面入手,分别讲解与自定义控件相关的各种知识,给大家系统地梳理相关知识点,并且通过翔实的案例讲解每个知识点在现实工作中所能实现的功能。
|
關於作者: |
张恩伟,花名启舰,曾是阿里巴巴软件研发工程师,是CSDN博客专家,写有Android自定义控件三部曲系列文章,获得很高的阅读量,现在是杭州编程侠有限公司CEO。
|
目錄:
|
开篇
第1章绘图基础2
1.1基本图形绘制2
1.1.1概述2
1.1.2画笔的基本设置4
1.1.3Canvas使用基础6
1.1.4Color10
1.2路径11
1.2.1概述11
1.2.2直线路径12
1.2.3弧线路径12
1.3Region14
1.3.1构造Region14
1.3.2区域相交16
1.4Canvas(画布)19
1.4.1Canvas变换19
1.4.2画布的保存与恢复23
动 画 篇
第2章视图动画26
2.1视图动画标签26
2.1.1概述26
2.1.2scale标签28
2.1.3alpha标签34
2.1.4rotate标签35
2.1.5translate标签36
2.1.6set标签37
2.2视图动画的代码实现38
2.2.1概述38
2.2.2ScaleAnimation38
2.2.3AlphaAnimation40
2.2.4RotateAnimation40
2.2.5TranslateAnimation41
2.2.6AnimationSet42
2.2.7Animation43
2.3插值器初探44
2.3.1AccelerateDecelerateInterpolator45
2.3.2AccelerateInterpolator47
2.3.3DecelerateInterpolator48
2.3.4LinearInterpolator49
2.3.5BounceInterpolator49
2.3.6AnticipateInterpolator50
2.3.7OvershootInterpolator51
2.3.8AnticipateOvershootInterpolator53
2.3.9CycleInterpolator54
2.4动画示例55
2.4.1镜头由远及近效果55
2.4.2加载框效果56
2.4.3扫描动画57
2.5逐帧动画60
2.5.1XML实现61
2.5.2代码实现66
第3章属性动画68
3.1ValueAnimator的基本使用68
3.1.1概述68
3.1.2ValueAnimator的简单使用71
3.1.3常用函数74
3.1.4示例:弹跳加载中效果83
3.2自定义插值器与Evaluator86
3.2.1自定义插值器87
3.2.2Evaluator90
3.3ValueAnimator进阶ofObject96
3.3.1概述96
3.3.2示例:抛物动画98
3.4ObjectAnimator101
3.4.1概述101
3.4.2ObjectAnimator动画原理106
3.4.3自定义ObjectAnimator属性107
3.4.4何时需要实现对应属性的get函数110
3.4.5常用函数112
3.5组合动画AnimatorSet113
3.5.1playSequentially与playTogether函数113
3.5.2AnimatorSet.Builder118
3.5.3AnimatorSet监听器119
3.5.4常用函数122
3.5.5示例:路径动画126
3.6Animator动画的XML实现132
3.6.1animator标签132
3.6.2objectAnimator标签134
第4章属性动画进阶136
4.1PropertyValuesHolder与Keyframe136
4.1.1PropertyValuesHolder137
4.1.2Keyframe140
4.1.3PropertyValuesHolder之其他函数148
4.1.4示例:电话响铃效果148
4.2ViewPropertyAnimator150
4.2.1概述150
4.2.2常用函数150
4.2.3性能考量153
4.3为ViewGroup内的组件添加动画153
4.3.1animateLayoutChanges属性154
4.3.2LayoutTransition157
4.3.3其他函数161
4.4开源动画库NineOldAndroids163
4.4.1NineOldAndroids中的ViewPropertyAnimator164
4.4.2NineOldAndroids中的ViewHelper164
第5章动画进阶168
5.1利用PathMeasure实现路径动画168
5.1.1初始化168
5.1.2简单函数使用169
5.1.3getSegment函数171
5.1.4getPosTan函数177
5.1.5getMatrix函数181
5.1.6示例:支付宝支付成功动画182
5.2SVG动画184
5.2.1概述184
5.2.2vector标签与图像显示186
5.2.3动态Vector197
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绘图四线格与FontMetrics210
6.2.3常用函数214
6.2.4示例:定点写字216
6.3Paint常用函数218
6.3.1基本设置函数218
6.3.2字体相关函数221
第7章绘图进阶223
7.1贝济埃曲线223
7.1.1概述223
7.1.2贝济埃曲线之quadTo227
7.1.3贝济埃曲线之rQuadTo234
7.1.4示例:波浪效果235
7.2setShadowLayer与阴影效果238
7.2.1setShadowLayer构造函数238
7.2.2清除阴影240
7.2.3示例:给文字添加阴影242
7.3BlurMaskFilter发光效果与图片阴影243
7.3.1概述243
7.3.2给图片添加纯色阴影245
7.4Shader与BitmapShader248
7.4.1Shader概述248
7.4.2BitmapShader的基本用法249
7.4.3示例一:望远镜效果254
7.4.4示例二:生成不规则头像256
7.5Shader之LinearGradient257
7.5.1概述257
7.5.2示例:闪光文字效果261
7.6Shader之RadialGradient264
7.6.1双色渐变264
7.6.2多色渐变266
7.6.3TileMode填充模式267
第8章混合模式269
8.1混合模式之AvoidXfermode269
8.1.1混合模式概述269
8.1.2AvoidXfermode270
8.1.3AvoidXfermode绘制原理274
8.1.4AvoidXfermode之Mode.AVOID275
8.2混合模式之PorterDuffXfermode276
8.2.1PorterDuffXfermode概述276
8.2.2颜色叠加相关模式279
8.3PorterDuffXfermode之源图像模式285
8.3.1Mode.SRC285
8.3.2Mode.SRC_IN285
8.3.3Mode.SRC_OUT288
8.3.4Mode.SRC_OVER293
8.3.5Mode.SRC_ATOP293
8.4目标图像模式与其他模式294
8.4.1目标图像模式294
8.4.2其他模式Mode.CLEAR303
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.1saveLayer函数307
9.2.2画布与图层312
9.2.3saveLayer和saveLayerAlpha函数的用法312
9.3Flag的具体含义316
9.3.1Flag之MATRIX_SAVE_FLAG316
9.3.2Flag之CLIP_SAVE_FLAG318
9.3.3Flag之FULL_COLOR_LAYER_SAVE_FLAG和HAS_ALPHA_
LAYER_SAVE_FLAG320
9.3.4Flag之CLIP_TO_LAYER_SAVE_FLAG323
9.3.5Flag之ALL_SAVE_FLAG325
9.4恢复画布325
9.4.1restoreToCountint count325
9.4.2restore与restoreToCountint count的关系328
第10章Android画布330
10.1ShapeDrawable331
10.1.1shape标签与GradientDrawable331
10.1.2ShapeDrawable的构造函数333
10.1.3常用函数345
10.1.4自定义Drawable351
10.1.5Drawable与Bitmap对比357
10.2Bitmap359
10.2.1概述360
10.2.2创建Bitmap方法之一:BitmapFactory362
10.2.3BitmapFactory.Options369
10.2.4创建Bitmap方法之二:Bitmap静态方法377
10.2.5常用函数384
10.2.6常见问题401
10.3SurfaceView408
10.3.1概述408
10.3.2SurfaceView的基本用法409
10.3.3SurfaceView双缓冲技术421
第11章Matrix与坐标变换442
视 图 篇
第12章封装控件444
12.1自定义属性与自定义Style444
12.1.1概述444
12.1.2declare-styleable标签的使用方法444
12.1.3在XML中使用自定义的属性446
12.1.4在代码中获取自定义属性的值447
12.1.5declare-styleable标签其他属性的用法448
12.2测量与布局452
12.2.1ViewGroup绘制流程452
12.2.2onMeasure函数与MeasureSpec452
12.2.3onLayout函数455
12.2.4获取子控件margin值的方法460
12.3实现FlowLayout容器466
12.3.1XML布局466
12.3.2提取margin值与重写onMeasure函数468
第13章控件高级属性475
13.1GestureDetector手势检测475
13.1.1概述475
13.1.2GestureDetector.OnGestureListener接口475
13.1.3GestureDetector.OnDoubleTapListener接口479
13.1.4GestureDetector.SimpleOnGestureListener类483
13.1.5onFling函数的应用识别是向左滑还是向右滑485
13.2Window与WindowManager486
13.2.1Window与WindowManager的关系486
13.2.2示例:腾讯手机管家悬浮窗的小火箭效果487
|
內容試閱:
|
前言
在我刚入门Android的时候,就被各种自定义控件所吸引,但当真正想要自己去制作时,由于涉及的知识太多,所以根本无从下手。而且我在搜索网页时也发现,与自定义控件相关的知识非常少,大都是一些例子的源码,讲解的内容非常有限。从那时起,我便想,如果我学会了自定义控件,就要写一系列博文,把相关的知识梳理清楚,供后来者参考。
从2015年起,我便着重积累这方面的知识。从2016年1月起,我基本保持每两周一篇博文的频率在CSDN上公开发表。在不知不觉间,我已经连续更新了二十几篇博文,得到了很多朋友的喜欢和赞扬。我当初更新博客的目的很简单,一方面,能够梳理知识点,以防自己忘记;另一方面,能为后来者做一点事,希望大家在学习自定义控件时,不必像我这样费劲。
后来,电子工业出版社的付睿编辑联系到我,想让我把与自定义控件相关的知识整理成书。刚开始我是犹豫的,因为纸质媒介很难表现出自定义控件所特有的动画和色彩。为此,电子工业出版社给予了我很大的支持,在官网上添加博客功能,方便我的动态图片上传到后台,进而将图片地址制作成二维码,供大家扫描观看。这一突破性的想法解决了我的后顾之忧。非常感谢他们的支持!
我在阿里巴巴工作的时候,在时间上是非常紧张的,从每天早上9点到晚上9点是正常的上下班时间。为了写书,我每天早上保证7点到公司,写到9点,然后再回工位上班;周末基本上也都在准备资料、写代码、写书中度过。这让我原本非常紧张的生活变得更加紧张。
然而我又是一个不安分的人,我于2017年4月从阿里巴巴辞职,跟朋友一起去创业。创业路上的艰辛是我所没有预见的,原本不多的时间被瓜分得更是少之又少,只能每天熬夜写作。
非常感谢我的妻子聂倩,在这两年里,基本上没有时间陪你,是你的宽容与支持才有了这本书的成稿。同时,也要感谢我的小公主雯雯,如果不是你的到来,我就不会体会到为人父的快乐,是你让我在工作中充满了力量。感谢灰灰,从创业开始就随我四处奔波,不离不弃。感谢博哥,在公司最困难的时候,选择留下来共渡难关。感谢你们在公司走上正轨后,为我承担了工作中大部分的责任,让我能安心地完成本书。
本书开篇主要讲解了入门自定义控件所需的一些必备知识;在动画篇中,详细讲解了在Android中制作动画的几种方法;在绘图篇中,具体讲解了与绘图相关的知识;在视图篇中,主要讲解了控件本身所涉及的一些知识。
在写作过程中,我尽量做到两点。第一,讲通、讲透。以我的理解,讲解出相关的知识所涉及的方方面面,力争让大家不再需要自己找资料,就可以全面理解这些知识。当然,本书中的有些内容在网上是找不到的,都是根据个人经验而得出的结论,难免有所偏失,如有不足,还望指正。第二,实例交织。我尽量在每个知识点中都加入一些实战中的例子,方便大家理解。
为了做到这两点,本书内容非常多,我把相对不重要的内容迁移到网上,大家可以到网上继续阅读。同时,本书的前后章节是经过严格推敲的,大家切勿跳章学习,必须按照顺序逐步进行。虽然我会给大家提供源码,但是请大家自己把代码敲一遍,因为只有动手写过的东西,才真正是自己的。
我在更新博客时,喜欢在每篇博文前加一句序言来激励自己。在本书中,我在每章前仍会加一句序言。本书第1章的序言是我非常喜欢的一句话,送给大家:迷茫,本就是青春该有的样子,但不要让未来的你讨厌现在的自己。
|
|