Android自定义view常用类和方法说明

一、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,最多的。意思就是,根据我当前的情况,结合你指定的尺寸参数来考虑,在不超过我给你限定的尺寸的前提下,你测量一个恰好能包裹你内容的尺寸就可以了。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享