二阶贝塞尔曲线部分理解

/**
 * Author  : 黄家驹  time : 2017/8/1.
 * 此乃二阶贝塞尔曲线的部分理解,目前不具有了解三阶贝塞尔曲线能力;往后会更新三阶贝塞尔曲线;
 */
public class MyBezier extends View {
    private Paint paint;
    private Path path;
    private Point starpoint;
    private Point endpoint;
    private Point assistpoint;
    private int VillainX;
    private int VillainY;

    public MyBezier(Context context) {
        this(context, null);
    }

    public MyBezier(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyBezier(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        paint = new Paint();
        path = new Path();
        //开始坐标
        starpoint = new Point(300, 600);
        //结束坐标
        endpoint = new Point(900, 600);
        //控制点坐标
        assistpoint = new Point(600, 900);
        // 抗锯齿
        paint.setAntiAlias(true);
        // 防抖动
        paint.setDither(true);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 画笔颜色
        paint.setColor(Color.BLACK);
        // 笔宽
        paint.setStrokeWidth(10);
        // 空心
        paint.setStyle(Paint.Style.STROKE);
        // 重置路径
        path.reset();
        path.moveTo(starpoint.x, starpoint.y);
        //二阶贝塞尔曲线重要方法
        path.quadTo(assistpoint.x, assistpoint.y, endpoint.x, endpoint.y);
        //画路线
        canvas.drawPath(path, paint);
        //固定控制点
        //  canvas.drawPoint(assistpoint.x,assistpoint.y,paint);
        //填充图片
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ee), VillainX, VillainY, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_MOVE:
                //控制点改为手指点击坐标
                VillainX = assistpoint.x = (int) event.getX();
                VillainY = assistpoint.y = (int) event.getY();
                invalidate();
                break;
        }
        return true;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值