绘制的基本要素
onDraw(Canvas) 绘制方法
Canvas 绘制工具
Paint 调整风格 粗细等
坐标系: x y ,3D 会有z轴,x 左到右,y 上至下,与数学中y颠倒
尺寸单位: 布局中 dp ,sp ,代码中 px;dp 为了适配不同的尺寸
绘制的关键:
draw(Canvas )......(关键类:Paint)
Paint.ANTI_ALIAS_FLAG 抗锯齿 paint.setFlag
像素值和DP转化 TypedValue.applyDimension(TypeValue.COMPLEX_UNIT_DIP,value,rousources.displayMetrics)
rousources.displayMetrics = Resource.getSystem().getDisplayMetric
//dp 2 px
val Float.px
get() = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
this,
Resources.getSystem().displayMetrics
)
抗锯齿原理:修改图形,变得和原始不一样,边缘模糊化,半透明化,看起来视觉上平滑
绘制需要有起点和终点,两点组合
绘制线 : canvas.drawLine 坐标参数 (start x, start y , end x ,end y,paint)
绘制圆: canvas.drawCircle 坐标(cx , cy ,radius,paint)也就是 center x , center y , 半径
draw Path(path,point)
drawArc(left,top,right,bottom,startAngle 起始角度,sweepAngle 划过角度,usecenter 是否连接中心,)
onSizeChange 尺寸改变时调用
path.reset() 重置
path.addCircle(centerx , center y, radius,orition 方向 顺时针Path.Direction.CW和逆时针Path.Direction.CW ); 添加圆----> CW = clockwise ,CCW = counter-clockwise
CW,CCW作用: 配合填充方式判断多个图形方向相交部分填充还是其他
path.addRect 添加矩形()
填充方法:path.setfillType = EVEN_ODD,INVERSE_EVEN_ODD,INVERSE_WINDING,WINDING
INVERSE_EVEN_ODD 是 EVEN_ODD的反规则
INVERSE_WINDING 是 WINDING的反规则
左右 +1 , -1
默认是WINDING填充规则 如果朝一个方向绘制,那么相交的就都属于内部
EVEN_ODD 不管方向如何,每遇到相交点就+1,偶数是外部,基数是内部
ext 贝塞尔曲线
PathMeasure : path准备好之后
PathMeasure(path,forceCloseed 是否自动闭合)
pathMeasure.length 获取长度
pathMeasure.getPosTan() 路径的长度的切脚
辅助类方法:范围裁剪(clip......())和几何变换(Matrix) View的left / top /right /bottom 的任意一个点或者四个点的变换
还可以重写其他的绘制方法控制覆盖关系
paint:
strokeWidth 外线宽度
style 样式 例如 Paint.Style.STROKE
setPathEffect(path,advance 提前量 前置量,phase 阶段 空值 )设置pain效果 // PathDashPathEffect虚线
pathEffect会覆盖原先值 用特效画
canvas.translat(dx,dy) 偏移 横向 , 纵向
canvas.restore() 恢复
canvas.save() 保存属性
kotlin for 遍历 for((index,value) in list.withIndex) 去角标索引文章来源:https://www.toymoban.com/news/detail-674055.html
Kotlin const 常量文章来源地址https://www.toymoban.com/news/detail-674055.html
到了这里,关于Android 之自定义绘制一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!