Android 之自定义绘制一

绘制的基本要素

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) 去角标索引

 Kotlin const 常量

你可能感兴趣的:(android,html5)