自定义View初探-Path

2017-05-26  本文已影响0人  HuBoZzz

自定义View 初探-Path

Path 就是个画路径的

源码注释:

The Path class encapsulates compound (multiple contour) geometric paths
consisting of straight line segments, quadratic curves, and cubic curves.
It can be drawn with canvas.drawPath(path, paint), either filled or stroked
(based on the paint's Style), or it can be used for clipping or to draw
 text on a path

硬式翻译(硬着脸皮翻):Path这个类封装了一些画几何图形的方法,都是有啥呢?直线,二次曲线,三次曲线,通过canvars,drawPath()把你画的集合图形绘制出来

moveTo(float x, float y)

两个点可以画出个直线或者面,那么这个moveTo(),就是把线的起始位置设置成(x,y)

lineTo(float x, float y)

这个就是画两点之间线的末端坐标啦,如果不手动设置moveTo(),你再调用 lineTo(),那么起始端就是你上个末端的坐标啦!

close()

这个就是把你最初的起点和最后的起点连线,如果你已经有两个边了,就可能组成封闭图形

示例:

        mPath.reset();
        mPath.moveTo(100, 100);
        // 连接路径到点
        mPath.lineTo(300, 100);
        mPath.lineTo(400, 200);
        mPath.lineTo(200, 200); 
        mPath.close();//这样是会连起来的,帮你把口封住
        canvas.drawPath(mPath, mPaint);

这就成了梯形了

这是Path style = Paint.Style.STROKE 这是Path style = Paint.Style.FILL

quadTo(float x1, float y1, float x2, float y2)

画个曲线,二阶贝塞尔曲线

二阶贝塞尔曲线

那么 P0点就是起始点(moveTo()设置的,或者是lineTo()设置的,或者是默认的(0.0)),P1就是参数(x1,y1)了,p2(x2,y2)啦

  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPath.reset();
        mPath.moveTo(100, 100);
        mPath.quadTo(200, 200, 300, 100);
        mPath.quadTo(400, 200, 500, 100);

        canvas.drawPath(mPath, mPaint);
    }

如图:

是不是很曲折啊

cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)

三阶贝塞尔曲线

三阶贝塞尔曲线

与quadTo类似,前四个参数表示两个控制点,最后两个参数表示终点。其实,(x1,y1)就是P1,(x2,y2)是P2,(x3,y3)是P3

最后

参考

PS: 欢迎敲打( ̄▽ ̄)"

上一篇 下一篇

猜你喜欢

热点阅读