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 常量

相关推荐
一切皆是定数26 分钟前
Android车载——VehicleHal初始化(Android 11)
android·gitee
一切皆是定数28 分钟前
Android车载——VehicleHal运行流程(Android 11)
android
problc28 分钟前
Android 组件化利器:WMRouter 与 DRouter 的选择与实践
android·java
图王大胜1 小时前
Android SystemUI组件(11)SystemUIVisibility解读
android·framework·systemui·visibility
服装学院的IT男5 小时前
【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-2
android
Arms2065 小时前
android 全面屏最底部栏沉浸式
android
服装学院的IT男5 小时前
【Android 源码分析】Activity生命周期之onStop-1
android
ChinaDragonDreamer8 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
安冬的码畜日常9 小时前
【CSS in Depth 2 精译_044】第七章 响应式设计概述
前端·css·css3·html5·响应式设计·响应式
网络研究院10 小时前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术