用贝塞尔画弧形(弧形的绘制)

//前段时间有个需求如下
这里写图片描述

//背景的那个蓝色的弧形,要怎么写,当时脑子闪现的就是贝塞尔曲线的弧形,刚好和其匹配,于是就尝试了一下

//写出来的效果图如下:
这里写图片描述

//是不是看起来很像

//1.0第一步是绘一个弧形view

代码如下:

class MyView extends View {

        private Paint mPaint;
        private Path mPath;
        private Point startPoint;
        private Point endPoint;
        private Point assistPoint;
        private int screenWidth;
        private int screenHeigh;

        public MyView(Context context) {
            super(context);
            //获取屏幕的宽高
            getScreenArgs();
            //初始化画笔,path等
            initContext();

        }

        private void initContext() {
            mPaint = new Paint();
            mPaint.setColor(getResources().getColor(R.color.colorPrimary));
            mPaint.setStrokeWidth(6);//设置画笔的粗细
            mPath = new Path();
            startPoint = new Point(0,0);//设置起点(可以自定义)
            endPoint = new Point(screenWidth, 0);//设置终点(可以自己定)
            assistPoint = new Point(screenWidth/2,screenHeigh/10);//设置中间辅助切线点
            mPaint.setAntiAlias(true);// 抗锯齿
            mPaint.setDither(true);// 防抖动,更清晰
        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            //画笔重置
            mPath.reset();
            // 起点
            mPath.moveTo(startPoint.x, startPoint.y);
            // 开始画贝塞尔曲线
            mPath.quadTo(assistPoint.x, assistPoint.y, endPoint.x, endPoint.y);
            // 画路径
            canvas.drawPath(mPath, mPaint);
        }

        public void getScreenArgs() {
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            screenWidth = dm.widthPixels;
            screenHeigh = dm.heightPixels;
        }
    }

//其中的关键点就是起点和终点的两个点的坐标,这个可以自定义,也可以随着手指落下的时候获取

//中间的辅助点,就是在起点或者终点的y坐标上加一个固定值(屏幕高度的百分比)

//mainActivity的中代码如下:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyView view = new MyView(this);
        setContentView(view);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值