简单贝塞尔曲线

来源:互联网 发布:淘宝网衣服女装休闲裙 编辑:程序博客网 时间:2024/06/05 16:26
package com.example.beisaier;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.Point;import android.graphics.PointF;import android.view.View;/** * Created by Administrator on 2017/10/22. */public class Towlion extends View {    private Paint paint;    private PointF start;    private Point end,zhondian;    public Towlion(Context context) {        super(context);        //创建一个画笔        paint = new Paint();        paint.setStrokeWidth(10);//设置线的宽度        paint.setStyle(Paint.Style.STROKE);//设置样式        paint.setTextSize(60);        start = new PointF(0, 0);//创建一个点        start.set(300,300);        end = new Point(0, 0);//创建一个点        end.set(1000,350);        zhondian = new Point(0, 0);//创建一个点        zhondian.set(800,450);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //设置点的style        paint.setColor(Color.RED);        paint.setStrokeWidth(20);        //加入点        canvas.drawPoint(start.x, start.y, paint);        canvas.drawPoint(zhondian.x, zhondian.y, paint);        canvas.drawPoint(end.x, end.y, paint);        /**         * 俩点连线         */        //canvas.drawLine(start.x,start.y,zhondian.x,zhondian.y,paint);        //canvas.drawLine(zhondian.x,zhondian.y,end.x, end.y,paint);        paint.setColor(Color.GRAY);        paint.setStrokeWidth(8);        /**         * 抛物线         */        Path path = new Path();//创建路径        //起点        path.moveTo(start.x, start.y);        path.quadTo(400, 500, zhondian.x,zhondian.y);        canvas.drawPath(path, paint);        Path paths = new Path();//创建路径        paths.moveTo(zhondian.x,zhondian.y);        paths.quadTo(900, 200, end.x, end.y);        canvas.drawPath(paths, paint);    }}
package com.example.beisaier;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PointF;import android.view.MotionEvent;import android.view.View;/** * Created by huqing on 2016/6/27. */public class TwoBezier extends View {    private Paint mPaint;    private int centerX, centerY;    private PointF start, end, fingerPoint;    /**     *     使用,例:     *    TwoBezier mBezier = new TwoBezier(this);     *    setContentView(mBezier);     *     * @param context     */    public TwoBezier(Context context) {        super(context);        //画笔        mPaint = new Paint();        mPaint.setStrokeWidth(8);        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setTextSize(60);        //三点确定该二阶曲线        start = new PointF(0, 0);        end = new PointF(0, 0);        fingerPoint = new PointF(0, 0);    }    /**     * 手指触碰时获取当前手指坐标     * @param event     * @return     */    @Override    public boolean onTouchEvent(MotionEvent event) {        // 根据触摸位置更新控制点,并提示重绘        fingerPoint.x = event.getX();        fingerPoint.y = event.getY();        invalidate();//调用onDraw方法        return true;    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        // 绘制数据点和控制点        mPaint.setColor(Color.GRAY);        mPaint.setStrokeWidth(20);        canvas.drawPoint(start.x, start.y, mPaint);        canvas.drawPoint(end.x, end.y, mPaint);        canvas.drawPoint(fingerPoint.x, fingerPoint.y, mPaint);        // 绘制辅助线        mPaint.setStrokeWidth(4);        canvas.drawLine(start.x, start.y, fingerPoint.x, fingerPoint.y, mPaint);        canvas.drawLine(end.x, end.y, fingerPoint.x, fingerPoint.y, mPaint);        // 绘制贝塞尔曲线        mPaint.setColor(Color.RED);        mPaint.setStrokeWidth(8);        //绘制曲线路径        Path path = new Path();        //起点        path.moveTo(start.x, start.y);        //关键方法:谷歌封装好的贝塞尔曲线绘制方法quadTo,给出控制点和终点        path.quadTo(fingerPoint.x, fingerPoint.y, end.x, end.y);        canvas.drawPath(path, mPaint);    }    /**     * onSizeChanged的启动时间在onDraw之前,初始化该View时获取到长宽     */    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        //中心点        centerX = w / 2;        centerY = h / 2;        //左侧点        start.x = centerX - 200;        start.y = centerY;        //右侧点        end.x = centerX + 200;        end.y = centerY;        //控制点,就是手指移动的那个点        fingerPoint.x = centerX;        fingerPoint.y = centerY - 100;    }}



package com.example.beisaier;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new Towlion(this));    }}

 
原创粉丝点击