当前位置: 首页 > news >正文

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 pxval Float.pxget() = 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 常量

http://www.lryc.cn/news/140574.html

相关文章:

  • vue3 计算两个表单得到第三个表单数据
  • Premiere Pro软件安装包分享(附安装教程)
  • springboot设置文件上传大小,默认是1mb
  • Unity 之transform.LookAt() 调整一个物体的旋转,使其朝向指定的位置
  • linux————haproxy
  • 【80天学习完《深入理解计算机系统》】第十天 3.3 条件码寄存器【CF ZF SF OF】【set】
  • 使用WSL修改docker文件存储位置
  • 软件设计师学习笔记6-存储系统
  • 【TI毫米波雷达笔记】CCS雷达工程内存RAM指定(DATA_SECTION,以IWR6843AOP为例)
  • 安卓移动应用开发实训室建设方案
  • 我的编程学习过程
  • 亚马逊云科技 云技能孵化营 初识机器学习
  • 多种编程语言运行速度排名-10亿次除7求余数为0的数量
  • Web 应用框架 Express 构建 RESTful API
  • Orchestrator介绍一 简介安装与web端管理
  • 【C++心愿便利店】No.3---内联函数、auto、范围for、nullptr
  • CV:边缘检测的算法包含 Prewitt、Sobel、Laplacian 和 Canny。
  • 【算法系列篇】前缀和
  • 若依移动端Ruoyi-App 项目的后端项目入门
  • (学习笔记-调度算法)内存页面置换算法
  • 行为型模式-观察者模式
  • 前端面试:【新技术与趋势】WebAssembly、Serverless、GraphQL
  • 【ubuntu】 20.04 网络连接器图标不显示、有线未托管、设置界面中没有“网络”选项等问题解决方案
  • SpringCloud/SpringBoot多模块项目中配置公共AOP模块实现打印子模块Controller所有请求参数与日志
  • 【GeoDa实用技巧100例】022:geoda生成空间权重矩阵(邻接矩阵、距离矩阵)
  • 基于web的鲜花商城系统java jsp网上购物超市mysql源代码
  • 意外发现Cortex-M内核带的64bit时间戳,比32bit的DWT时钟周期计数器更方便,再也不用担心溢出问题了
  • 数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
  • 改进YOLO系列:6.添加ECA注意力机制
  • 软件测试知识点总结(一)