Android中贝塞尔曲线的使用

2024-04-25 07:38

本文主要是介绍Android中贝塞尔曲线的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android中主要在onDraw方法中使用quadTo & cubicTo 画二次和三次贝塞尔曲线;

绘制贝塞尔曲线一般会结合moveTo一起使用,

    path.reset();path.moveTo(start.x,start.y);path.quadTo(control.x,control.y,end.x,end.y);canvas.drawPath(path, mPaint);//二阶1个控制点,三阶2个控制点.path.moveTo(start.x, start.y);path.cubicTo(control1.x, control1.y, control2.x,control2.y, end.x, end.y);

使用中,我们常常不仅仅是画一条曲线,而是曲线和直线一起拼图/剪切画布。这里着重提一下ClipPath切了画布后有锯齿,从How to draw smooth / rounded path? 获取解决方案是,在drawBitmap的同时也drawPath,让圆滑的path补贴锯齿边缘,就光滑了.

    mPaint.setColor(Color.RED);mPaint.setStrokeWidth(8);mPaint.setDither(true);mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeJoin(Paint.Join.ROUND);mPaint.setStrokeCap(Paint.Cap.ROUND);mPaint.setPathEffect(new CornerPathEffect(10));mPaint.setAntiAlias(true);path.reset();path.moveTo(0, 0);path.lineTo(start.x, start.y);path.quadTo(control.x, control.y, end.x, end.y);path.lineTo(end.x, 0);path.lineTo(0, 0);canvas.drawPath(path, mPaint);mPaint.setColor(mColor);mPaint.setStyle(Paint.Style.FILL);mPaint.setAntiAlias(true);canvas.clipPath(path);//裁剪画布canvas.drawBitmap(bitmap,null,rect,mPaint);

应该还有其他方式去掉锯齿,弄明白了后续补充。


关于贝塞尔曲线的来龙去脉、计算公式等等,前人有好的图文,不在这里粘贴了,见参考文献。
文献1讲解的比较全面实用,直接链接过去看就行,文献2让自己动手画线有点趣味性,文献5和6是实例可以练手。

参考文献:
1.Path之贝塞尔曲线 这一篇非常适合进入状态,看了就懂,看了就能上手做;
2.The Bezier Game 这里可以练习photoshop(sketch)这些绘图软件中的钢笔工具(Vector),自己动手连线,体会贝塞尔曲线的形成 (画不出来好揪心,对于控制点把握不好);
3.基于贝塞尔曲线的Android动画差值器 介绍了贝塞尔曲线的由来,算法公式,动画差值器的代码实现;
4.Android中moveTo、lineTo、quadTo、cubicTo、arcTo详解(实例);
5.三次贝塞尔曲线练习之弹性的圆 是个好玩的实例;
6.MetaballLoading 另一个实例;
7.如何获取控制点 stackoverflow How to create circle with Bézier curves?, 不得不说,数学是美的。

这篇关于Android中贝塞尔曲线的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934076

相关文章

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.