二阶贝塞尔曲线部分理解

来源:互联网 发布:永久免费域名注册 编辑:程序博客网 时间:2024/06/05 05:17
/** * 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;    }}