多年的Android开发中,android动画有最初的补间到后来的属性动画,path动画,svg动画,转场动画,lottie动画,还有就是可以通过绘制等自定义view动画,属性,path,转场平时都是很常用的动画方式,先前使用完就完了,没有转化为自己掌握的知识,所以再次使用的时候再重新去百度谷歌,这次正好项目中效果使用到这几个动画,此处开个文集聊一聊Android中的动画,补间就先放下了,主要是path,svg和转场。
svg动画简单可以说是基于path的,而path涉及到的知识点也很多,所以此处两篇文章描述path,第一篇介绍path及其伙伴的通用(常用)方法,第二篇通过当前项目中效果的两种实现加深path的使用。
参考文章:
动画官方文档说明
path方法详解](https://www.gcssloop.com/customview/Path_Over)
PathMeasure 方法详解
path arcTo详解
path addarc和arcTo区别解释
利用path进行简单的图形绘制
特殊路径文字的绘制
两篇文章更多的是对这两天path和svg的研究学习总结,其中很多都是参考了上面的文章,首先对上面大神们表示感谢,特别是有些api图片都是出自上面大神文章,此两篇文章更多的是后续学习参考和对他人一点点的帮助,不会用于商业目的,所以如有不妥可以告知删除。
- path
-
path是属于Android 绘制框架graphics中很重要的一个工具类,提供了Android绘制点,线,三角形,矩形等基本图形外绘制不规矩线和图形的实现,下面主要api如表:
path api表格 - moveTo(float x, float y) :移动到某个点,path绘制中通常会移动到起点或者绘制过程中移动到某个点继续绘制。
- lineTo(float x, float y):从path上个点到给定的点绘制一条直线
- rLineTo(float dx, float dy): 同上,也是画一条线,不同的是,上面的线的坐标系是初始坐标,下面的坐标系是基于当前点,即lineTo(300,400)是到300,400这个点画一条线,rline(300,400)是在当前点基础上移动300,400的点画一条线。
- quadTo(float x1, float y1, float x2, float y2):画一条弧线,起点是当前点,第一对参数指明了中间控制点,后面一堆参数指明了终止的点参数,通过三个点画一条弧线。
- cubicTo(float x1, float y1, float x2, float y2,float x3, float y3):同上,也是画一条弧线,不同的是在上面三个点的基础上又添加一个控制点,也有文章描述这两个方法对赢了贝赛尔曲线的两阶和三阶,本人不熟。
- addArc和arcTo区别:两者都是添加一段弧线,不同的是第一个起点是当前点,第二个不是当前点且可以没有交集,其参数都是定义一个矩形固定弧所属的椭圆的大小,接着两个参数是定义了弧的起始角度和旋转角度,后面api多一个参数,绘制弧线是否以当前点为起点,如果为true,那么两个api一致。
- addRect(float left, float top, float right, float bottom, Direction dir) :path上添加矩形等系列方法,参数为添加基本图形的位置参数等,最后一个参数是指明添加基本图形的闭合方式,CW(顺时针),CCW(逆时针)。
- closed():path最终是否闭合,调用此apipath最终会闭合。
- pathmeasure
-
path的测绘类,和textmeasure一致,起对应的api如下:
pathmeasure api表格 - 构造方法:path:给定测量类指定关联path,第二个boolean参数标识是否闭合,需要注意的是此处设置不会影响原有的path路径,只是测量的结果会有影响,原本不闭合path设置闭合后测绘出来会比原有path大一些。
- getLength():测绘后path的长度。
- nextContour():Android对于path中线的数量的认定并不是单个path对象仅有一个,是根据线的连接认定的,比如单个path对象中有两条线但是线没有链接,此时认定为两条,此方法是遍历计算path的长度的,返回boolean值,类似于迭代器的next方法。
- getSegment(float startD, float stopD, Path dst, boolean startWithMoveTo):取path中起点和终点的一段给目的path路径,最后一个参数标识起点是否移动到初始点,此方法很有用,通常使用path和此方法做path动画。
- getPosTan(float distance, float pos[], float tan[]):获取给定点的xy坐标及其对应tan(三角函数)值,distance是一个距离,0为起点,length为终点,取点位置就是0加上distance后的点的值。
- paint
-
path和canvas的drawLine等api一样指定了要绘制什么,paint则是指定了拿什么绘制,起到画笔的作用,setapi很多,不过常用的api就那么几个,如下:
paint常用api
设置绘制样式(填充还是镂空),设置渐变色,设置颜色,设置阴影,设置text对应的参数集合
-
canvas
canvas和paint一致,paint提供了画笔,canvas则是提供了画布,且这个画布是无限大的,只是他的显示大小是有限的,可以通过不停的draw方法绘制无限大的图形页面,其api方法如下:
image.png
- 上面描述了canvas的一系列绘制方法,比较特殊的已经做了标注。
- path的使用(总结待续)
- 在项目的开发中,path是很常见的,特别是结合属性动画可以做出很多很炫的动效,比较常用的见下面:
- 结合drawTextOnPah()和path可以绘制特殊路径文字
- 结合属性动画,可以绘制特殊路径上的动画效果,比如后续说到的灯箱效果,字体颜色渐变效果
网友评论