Android UI贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android UI贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )相关的知识,希望对你有一定的参考价值。

文章目录


贝塞尔曲线参考 : 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 UI贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )的主要内容,如果未能解决你的问题,请参考以下文章

Android UI贝塞尔曲线 ③ ( 贝塞尔曲线关键点坐标记录 | 二阶贝塞尔曲线示例 )

Android UI贝塞尔曲线 ① ( 一阶贝塞尔曲线 | 二阶贝塞尔曲线 )

Android UI贝塞尔曲线 ⑥ ( 贝塞尔曲线递归算法原理 | 贝塞尔曲线递归算法实现 )

Android UI贝塞尔曲线 ② ( 二阶贝塞尔曲线公式 | 三阶贝塞尔曲线及公式 | 高阶贝塞尔曲线 )

Android UI贝塞尔曲线 ⑤ ( 德卡斯特里奥算法 | 贝塞尔曲线递推公式 )

Android 高级UI解密 :花式玩转贝塞尔曲线(波浪轨迹变换动画)