自定义View-1Path基础操作

Path基本操作

-Path常用方法

作用 相关方法 备注
移动起点 moveTo 移动下一次操作的起点位置
设置终点 setLastPoint 重置当前path中最后一个点的位置
连接直线 lineTo 添加上一个点到当前点之间的直线到Path
闭合路径 close 连接第一个点到最后一个点,形成一个闭合区域
添加内容 addRect,addRoundRect,
addOval,addCircle,addPath
,addArc,arcTo
添加矩形,圆角矩形,椭圆,圆,路径,圆弧到当前Path(注意addArc和arcTo的区别)
是否为空 isEmpty 判断Path是否为空
是否为矩形 isRect 判断Path是否为一个矩形
替换路径 set 用新的路径替换到当前路径的所有内容
偏移路径 offset 对当前路径之前的操作进行偏移(不会影响之后的操作)

-Path方法详解

请关闭硬件加速以避免不必要的问题

第一组
  public void lineTo(float x, float y)
  public void moveTo(float x, float y)
  public void setLastPoint(float dx, float dy)
  public void close()

代码:

canvas.translate(mWidth / 2, mHeight / 2); 
Path path = new Path();                     // 创建Path
path.lineTo(200, 200);                      // lineTo
//path.moveTo(200,100);                     //下图1
//path.setLastPoint(200,100);        //下图2
path.lineTo(200,0);                         // lineTo
path.close();
canvas.drawPath(path, mPaint);              // 绘制Path

结果:


自定义View-1Path基础操作_第1张图片
path.moveTo(200,100)

自定义View-1Path基础操作_第2张图片
path.setLastPoint(200,100)

自定义View-1Path基础操作_第3张图片
path.close()

第二组
//圆形
public void addCircle(float x, float y, float radius, Path.Direction dir)
//椭圆
public void addOval(RectF rect, Path.Direction dir)
//矩形
public void addRect(RectF rect, Path.Direction dir)
//圆角矩形
public void addRoundRect(RectF rect, float rx,float ry, Path.Direction dir)
// path 将2个Path合并为一个
public void addPath(Path src)
public void addPath(Path src, float dx, float dy) //位移后合并
public void addPath(Path src,Matrix matrix)
自定义View-1Path基础操作_第4张图片
Path.Direction是一个枚举类型
path.addRect(-200,-200,200,200, Path.Direction.CW);
path.setLastPoint(-300,300); 
自定义View-1Path基础操作_第5张图片
Path.Direction.CW

自定义View-1Path基础操作_第6张图片
Path.Direction.CCW
path.addRect(-200,-200,200,200, Path.Direction.CW);
Path src = new Path();
src.addCircle(0,0,100, Path.Direction.CW);
path.addPath(src,0,-200);
canvas.drawPath(path,mPaint);
自定义View-1Path基础操作_第7张图片
addPath
//圆弧
public void addArc(RectF rect, float startAngle,float sweepAngle)  //等价于arcTo的forceMoveTo为true!
public void arcTo(RectF rect, float startAngle,float sweepAngle)  //默认forceMoveTo为false!!!
public void arcTo(RectF rect, float startAngle,float sweepAngle,boolean forceMoveTo)

此处对说明有疑问,根据实测,
为true时最后一个点会移动至圆弧终点而不是起点
为false时,首先连接圆弧起点与当前最后一点,而后最后一点移动至圆弧终点


自定义View-1Path基础操作_第8张图片
arcTo(forceMoveTo?)
canvas.translate(getWidth()/2,getHeight()/2);
canvas.scale(1,-1); //翻转y轴,变为熟悉的数学坐标
Path path = new Path();
path.lineTo(50,50);
RectF rectF = new RectF(0,0,100,100);
path.addArc(rectF,0,270); 
//path.arcTo(rectF,0,270);        
path.lineTo(150,0);
canvas.drawPath(path,mPaint);
自定义View-1Path基础操作_第9张图片
path.addArc

自定义View-1Path基础操作_第10张图片
path.arcTo

第三组
 //Path是否包含内容
public boolean isEmpty()
 //Path是否是矩形,若是,则将矩形信息存放至rect
public boolean isRect(RectF rect) 
// 赋值新path 相当于path=src
public void set(Path src)
//offset
public void offset (float dx, float dy)
public void offset (float dx, float dy, Path dst)
//offset栗子
canvas.translate(mWidth / 2, mHeight / 2);  // 移动坐标系到屏幕中心
canvas.scale(1,-1);                         // <-- 注意 翻转y坐标轴

Path path = new Path();                     // path中添加一个圆形(圆心在坐标原点)
path.addCircle(0,0,100, Path.Direction.CW);

Path dst = new Path();                      // dst中添加一个矩形
dst.addRect(-200,-200,200,200, Path.Direction.CW);

path.offset(300,0,dst);                     // 平移

canvas.drawPath(path,mPaint);               // 绘制path
mPaint.setColor(Color.BLUE);                // 更改画笔颜色
canvas.drawPath(dst,mPaint);                // 绘制dst

虽然我们在dst中添加了一个矩形,但是并没有表现出来,所以,当dst中存在内容时,dst中原有的内容会被清空,而存放平移后的path


自定义View-1Path基础操作_第11张图片
屏幕快照 2017-05-23 下午4.37.30.png

你可能感兴趣的:(自定义View-1Path基础操作)