Android实现Path平滑的涂鸦效果实例
时间:2022-07-28
本文章向大家介绍Android实现Path平滑的涂鸦效果实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
在最近的一个项目中做了一个涂鸦的效果,手指快速移动,会出现折线,这篇文章记录笔触优化。下面话不多说了,来一起看看详细的介绍吧。
优化前
优化
设计到的类:Paint,Path
Path类记录了坐标点集合决定线条轨迹,Paint决定怎么画
Paint处理
//连接的外边缘以圆弧的方式相交
paint.setStrokeJoin(Paint.Join.ROUND);
//线条结束处绘制一个半圆
paint.setStrokeCap(Paint.Cap.ROUND);
Path处理
这里用的到有个叫贝塞尔曲线的概念。关于贝塞尔曲线公式,它是依据几个位置任意的点坐标绘制出的一条光滑曲线。
在Path添加点坐标的时候,使用Path#quadTo(float,float,float,float)
代替 Path#lineTo(float,float)
。
lineTo(float,float)
从上一个点到某个指定的点新增一条线
quadTo(float,float,float,float)
从上一个点到某个指定的点新增一条二次方的贝塞尔曲线
项目中用的时候,又小优化了一下,代码如下:
if (Math.abs(lastX - x) < 3 && Math.abs(lastY - y) < 3) {
} else {
mPath.quadTo(lastX, lastY, (x + lastX) / 2, (y + lastY) / 2);
lastX = x ;
lastY = y ;
}
效果
线条拐弯处是不是平滑了很多,仔细的童鞋可能会发现整个线条有参差不齐的感觉,这个是抖动导致的,这个我们以后再说。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ZaLou.Cn的支持。
- 抽象是啥?就是一群人的特征;js中的call是啥?就是我想用你家的电饭锅
- 从node事件到观察者 -- 学习要有一根线索
- Joy:一款用于捕获和分析网络内部流量数据的工具
- 老尚,能讲讲闭包么?“可以,没问题,马上”
- PHP代码安全杂谈
- angularJs,请问vue是你失散多年的亲人吗?
- 无监督学习神经网络——自编码
- 不学不知道,sort()方法中的坑
- js数组去重的思路与缓动公式
- vue.js 的组件感觉比react的直观&&面试相关的七个实例
- 前端组件“可编辑表格”,怎么设计才好呢?先得有思路
- Linux基础(day61)
- 一款名为Rapid的勒索软件正在迅速传播
- 命令行下的“蒙面歌王”rundll32.exe
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- CentOS-AltArch-7(ARM版)下源码编译MySQL5.7.31
- 用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
- CentOS7下安装文档协作工具Confluence7.2.1
- caret包进行机器学习
- 容器化Go应用--基础镜像的未知时区问题
- 写给自己的Object和Function的3个灵魂拷问
- 48. Vue路由-使用命名视图实现经典布局
- 47. Vue使用children属性实现路由嵌套
- RecyclerView的缓存机制和内存优化
- 使用Anchore Enine来完善DevSecOps工具链
- PyTorch版CenterNet训练自己的数据集
- SpringBoot2 整合FreeMarker模板,完成页面静态化处理
- PHP多文件上传格式化
- NDK开发案例 | C/C++调用java层代码
- 深入理解 SecurityConfigurer 【源码篇】