【Android UI】贝塞尔曲线 ③ ( 贝塞尔曲线关键点坐标记录 | 二阶贝塞尔曲线示例 )
2023-06-13 09:18:06 时间
文章目录
贝塞尔曲线参考 : https://github.com/venshine/BezierMaker
一、贝塞尔曲线关键点坐标记录
贝塞尔曲线 绘制时 , 使用 android.graphics.Path 记录 贝塞尔曲线 的 ① 起始点 , ② 终止点 , 以及 ③ 若干 控制点 ;
一阶贝塞尔曲线有 0 个控制点 , 二阶贝塞尔曲线有 1 个控制点 , 三阶贝塞尔曲线有 2 个控制点 , ... , n 阶贝塞尔曲线 有 n-1 个控制点 ;
二、二阶贝塞尔曲线示例
创建 android.graphics.Path 实例对象后 , 首先调用 Path#moveTo 方法 , 设置起始点 ;
Path#moveTo 函数原型如下 :
/**
* 将下一个轮廓的起点设置为点(x,y)。
*
* @param x 新轮廓起点的x坐标
* @param y 新轮廓起点的y坐标
*/
public void moveTo(float x, float y) {
nMoveTo(mNativePath, x, y);
}
然后调用 Path#quadTo 方法 , 设置 二阶贝塞尔曲线 的 控制点 和 终止点 ;
/**
* 从最后一个点开始添加二次贝塞尔,
* 接近控制点(x1,y1),并在(x2,y2)处结束。
* 如果未对此轮廓进行moveTo()调用,
* 则第一个点将自动设置为(0,0)。
*
* @param x1 二次曲线上控制点的x坐标
* @param y1 二次曲线上控制点的y坐标
* @param x2 二次曲线端点的x坐标
* @param y2 二次曲线端点的y坐标
*/
public void quadTo(float x1, float y1, float x2, float y2) {
isSimplePath = false;
nQuadTo(mNativePath, x1, y1, x2, y2);
}
最后 , 调用 Canvas 画布的 Canvas#drawPath 方法 , 将上述设置 起始点 控制点 终止点 的 Path 实例对象 绘制到画布上 ;
三、代码示例
package kim.hsl.android_ui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class BesselCurve2 extends View {
public BesselCurve2(Context context) {
this(context, null);
}
public BesselCurve2(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public BesselCurve2(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
super.onSizeChanged(width, height, oldWidth, oldHeight);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 初始化 曲线 和 画笔 实例对象
Path path = new Path();
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(20);
// 设置起始点
path.moveTo(0, getHeight() / 2F);
// 设置控制点 和 终止点
path.quadTo(getWidth() / 2F, getHeight(), getWidth(), getHeight() / 2F);
// 绘制贝塞尔曲线
canvas.drawPath(path, paint);
}
}
绘制效果 :
相关文章
- Android 垂直同步和三重缓冲[通俗易懂]
- android定时器取消,Android定时器崩溃取消
- robotium android,Robotium 测试Android apk安装包
- Android Jetpack 导航组件 | Android 中文教学视频
- android应用程序_chrome Android
- android studio 图片资源的放置位置,你中枪了吗?
- Android File Transfer (mac-安卓手机文件传输)
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
- 【Android Gradle 插件】Gradle 依赖管理 ⑦ ( dependencies 传递依赖设置 | transitive 关闭依赖传递配置 | exclude 排除子依赖配置 )
- 【Android UI】Paint Gradient 渐变渲染 ② ( SweepGradient 梯度渐变渲染 | 围绕中心点绘制扫描渐变的着色器 | 多渐变色构造函数 | 雷达扫描效果 )
- 【Android UI】Canvas 画布 ⑤ ( Canvas 坐标系 | Canvas 绘图坐标系变换示例 )
- 【Android UI】Canvas 画布 ⑥ ( Canvas 绘图源码分析 | ViewRootImpl#draw 方法源码 | ViewRootImpl#drawSoftware 方法源码 )
- 【Android UI】Canvas 画布 ⑧ ( Canvas 绘图坐标系 2x2 矩阵 | Canvas 绘图坐标系 3x3 操作矩阵 )
- 【Android UI】贝塞尔曲线 ② ( 二阶贝塞尔曲线公式 | 三阶贝塞尔曲线及公式 | 高阶贝塞尔曲线 )
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ⑤ ( 优化 Gradle 构建脚本 | 构建脚本结构 | 闭包定义及用法 | 依赖配置 | android 块配置 )
- Android图片墙实现详解手机开发
- 细说Android事件传递详解手机开发
- Android系统与Linux之间的联系(android和linux)
- Android Pay登陆香港,但可能拼不过微信和苹果
- android连接wifi时获取广播地址代码
- android版本检测Android程序的版本检测与更新实现介绍
- android使用多线程更新ui示例分享