简单贝塞尔曲线

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));
    }
}

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值