【Android UI】贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )
2023-06-13 09:18:06 时间
文章目录
贝塞尔曲线参考 : https://github.com/venshine/BezierMaker
一、使用 Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线
创建 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#cubicTo 方法 , 设置 二阶贝塞尔曲线 的 控制点 和 终止点 ;
/**
* 从最后一个点开始添加一个三次贝塞尔,
* 接近控制点(x1,y1)和(x2,y2),
* 并在(x3,y3)处结束。
* 如果未对此轮廓进行moveTo()调用,
* 则第一个点将自动设置为(0,0)。
*
* @param x1 三次曲线上第一个控制点的x坐标
* @param y1 三次曲线上第一个控制点的y坐标
* @param x2 三次曲线上第二个控制点的x坐标
* @param y2 三次曲线上第二个控制点的y坐标
* @param x3 三次曲线端点的x坐标
* @param y3 三次曲线端点的y坐标
*/
public void cubicTo(float x1, float y1, float x2, float y2,
float x3, float y3) {
isSimplePath = false;
nCubicTo(mNativePath, x1, y1, x2, y2, x3, y3);
}
最后 , 调用 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 BesselCurve3 extends View {
public BesselCurve3(Context context) {
this(context, null);
}
public BesselCurve3(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public BesselCurve3(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.cubicTo(
getWidth() / 4F, getHeight(),
getWidth() * 3F / 4F, 0,
getWidth(), getHeight() / 2F);
// 绘制贝塞尔曲线
canvas.drawPath(path, paint);
}
}
绘制效果 :
相关文章
- android onresume方法,非静态方法’onResume’Android Studio
- android activity自动跳转,Android activity跳转之finish()方法的作用
- android bindservice方法,Android bindservice方法返回false
- android okio使用方法,Android 开源框架 Okio 原理剖析「建议收藏」
- android onresume方法,Android onActivityResult()和onResume()的执行顺序
- android 模拟器 haxm,Android模拟器不使用HAXM
- android sdk安装过程,图文详解Android 3.0 SDK安装教程
- Android通过jni调用本地c/c++接口方法总结
- Android Activity生命周期 之starting an activity
- 【错误记录】Android Studio 集成 ARoute 编译报错 ( 兼容 support 库和 androidx 库 | add ‘tools:replace=“android:appCo )
- 解析linux或android添加文件系统的属性接口的方法
- Android 7.0 应用启动流程分析详解手机开发
- Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局详解手机开发
- android抓屏详解手机开发
- mac os 下创建 android avd 后启动报找不到 avd ini 文件 问题解决方法
- android分辨率适配的方法
- Android中打电话的数据流程分析
- Android中AnimationDrawable使用的简单实例
- android动态控制状态栏显示和隐藏的方法实例
- android用java和c实现查找sd卡挂载路径(sd卡路径)的方法
- android读取assets文件示例
- Android中EditText和AutoCompleteTextView设置文字选中颜色方法
- Android入门之RelativeLayout、FrameLayout用法分析