Canvas常用方法
绘制方法
drawLine:画一条线,
drawPath:绘制传入的路径
drawColor:是直接将View显示区域用某个颜色填充满
drawRect drawRoundRect drawBitmap drawText drawCircle drawPoint等等
这些方法都和drawLine一样根据方法名就可以看出绘制的内容,按照需要传入参数即可
其他方法
translate:平移
scale:缩放
rotate:旋转
save:将当前的状态保存
restore:取出原来所保存的状态
这两个方法一般都要结合使用,save在前,restore在后,用来保证在这两个函数之间所做的操作不会对原来在canvas上所画图形产生影响,在中间进行一些旋转等操作,restore后可以继续使用之前的状态,这样中间进行的操作不会影响到或许的操作
Paint画笔常用的方法
setTextSize() :如果要绘制文字,一般需要设置字体大小,不然默认绘制12px,该方法决定两个小写'x'字母的宽度
setTypeface:设置字体类型
setColor(int color):传入一个十六进制的颜色参数,可设置ARGB的颜色
setStyle(int style): 设置画笔风格,有FILL,STROKE,FILL_AND_STROKE三种选择
setStrokeWidth(float width):设置画笔粗细
setTextSkewX:设置文字倾斜
setTextAlign:设置文本对齐方式,左对齐,右对齐,居中
setLetterSpacing:设置字符间距
setStrikeThruText:设置文本删除线
setUnderlineText:设置文本下划线
setAlpha:设置透明度
setAntAlias(boolean):设置是否防锯齿
setDither(boolean):设置是否防抖动。在绘制图片时,如果有超过屏幕能显示最大效果时,这个决定了如何down-sample(降低取样)。如果为false,绘制速度会变快,但绘制的颜色精度会下降(比如8888->565),true则会试图在这个down-sample中 修正这些错误,使得画面较为柔和。
setFlags(int flag):设置画笔的各项参数,与setXXX方法有同样的效果,比如setFlags(ANTI_ALIAS_FLAG) 等效于setAntiAlias(true)
无清除flag的方法,Paint提供reset()方法,重置画笔所有参数
breakText:计算指定长度的字符串
reset:重置画笔
invalidate方法
说明:请求重绘View树,即draw()过程,假如视图发生大小没有变化就不会调用layout()过程,并且只绘制那些“需要重绘的”
视图,即谁(View的话,只绘制该View ;ViewGroup,则绘制整个ViewGroup)请求invalidate()方法,就绘制该视图。
一般引起invalidate()操作的函数如下:
1、直接调用invalidate()方法,请求重新draw(),但只会绘制调用者本身。
2、setSelection()方法 :请求重新draw(),但只会绘制调用者本身。
3、setVisibility()方法 : 当View可视状态在INVISIBLE转换VISIBLE时,会间接调用invalidate()方法,继而绘制该View。
4 、setEnabled()方法 : 请求重新draw(),但不会重新绘制任何视图包括该调用者本身。
requestLayout方法
会导致调用measure()过程 和 layout()过程 。
说明:只是对View树重新布局layout过程包括measure()和layout()过程,而draw不一定被执行,只有当view的位置发生改变才会执行draw方法,如果要使当前view重绘需要调用invalidate
一般引起requestLayout()操作的函数如下:
1、setVisibility()方法:
当View的可视状态在INVISIBLE/ VISIBLE 转换为GONE状态时,会间接调用requestLayout() 和invalidate方法。
同时,由于整个个View树大小发生了变化,会请求measure()过程以及draw()过程,同样地,只绘制需要“重新绘制”的视图。
requestFocus函数说明
说明:请求View树的draw()过程,但只绘制“需要重绘”的视图。
谈到传递限制信息,那就是MeasureSpec类了,该类贯穿于整个measure过程,用来传递父布局对子View尺寸测量的约束信息。简单来说,该类就保存两类数据。
1、子View当前所在父布局的具体尺寸。
2、父布局对子View的限制类型。
那么限制类型又分为三种类型:
1、UNSPECIFIED,不限定。意思就是,子View想要多大,我就可以给你多大,你放心大胆的measure吧,不用管其他的。也不用管我传递给你的尺寸值。(其实Android高版本中推荐,只要是这个模式,尺寸设置为0)
2、EXACTLY,精确的。意思就是,根据我当前的状况,结合你指定的尺寸参数来考虑,你就应该是这个尺寸,具体大小在MeasureSpec的尺寸属性中,自己去查看吧,你也不要管你的content有多大了,就用这个尺寸吧。
3、AT_MOST,最多的。意思就是,根据我当前的情况,结合你指定的尺寸参数来考虑,在不超过我给你限定的尺寸的前提下,你测量一个恰好能包裹你内容的尺寸就可以了。