PathMeasure,顾名思义,就是一个用来测量Path的类,主要有以下方法:
构造方法
无参构造方法:
PathMeasure()
创建一个空的PathMeasure,用这个构造函数可创建一个空的 PathMeasure,但是使用之前需要先调用 setPath 方法来与 Path 进行关联。被关联的 Path 必须是已经创建好的,如果关联之后 Path 内容进行了更改,则需要使用 setPath 方法重新关联。
有参构造方法
PathMeasure(Path path, boolean forceClosed)
该构造函数是创建一个 PathMeasure 并关联一个 Path, 其实和创建一个空的 PathMeasure 后调用 setPath 进行关联效果是一样的,同样,被关联的 Path 也必须是已经创建好的,如果关联之后 Path 内容进行了更改,则需要使用 setPath 方法重新关联。 该方法有两个参数,第一个参数自然就是被关联的 Path 了,第二个参数是用来确保 Path 闭合,如果设置为 true, 则不论之前Path是否闭合,都会自动闭合该 Path(如果Path可以闭合的话)。
这里需要说明以下forceClosed:
1)不论 forceClosed 设置为何种状态(true 或者 false), 都不会影响原有Path的状态,即 Path 与 PathMeasure 关联之后,之前的的 Path 不会有任何改变。
2)forceClosed 的设置状态可能会影响测量结果,如果 Path 没有闭合但在与 PathMeasure 关联的时候设置 forceClosed 为 true 时,测量结果可能会比 Path 实际长度稍长一点,获取得到的是该 Path 闭合时的状态。
setPath
setPath(Path path, boolean forceClosed)方法就是关联一个Path,需要预先创建好。
isClosed
isClosed方法用于判断 Path 是否闭合,但是如果你在关联 Path 的时候设置 forceClosed 为 true 的话,这个方法的返回值则一定为true。
getLength
getLength()方法用于获取Path的长度。
public class PathMeasureView extends View {
private static final String TAG = "lwj";
private int mViewHeight;
private int mViewWidth;
private Paint paint;
public PathMeasureView(Context context) {
super(context);
init(context);
}
private void init(Context context) {
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(10);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.translate(mViewWidth/2, mViewHeight/2);
Path path = new Path();
path.lineTo(0, 300);
path.lineTo(300, 300);
path.lineTo(300, 0);
PathMeasure measure = new PathMeasure(path, false);
PathMeasure measure2 = new PathMeasure(path, true);
Log.i(TAG, "length:"+measure.getLength());//900
Log.i(TAG,"length:"+ measure2.getLength());//1200
canvas.drawPath(path, paint);
}
//该方法在当前View尺寸变化时被调用
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mViewHeight = h;
mViewWidth = w;
}
}
nextContour
我们知道 Path 可以由多条曲线构成,但不论是 getLength , getgetSegment 或者是其它方法,都只会在其中第一条线段上运行,而这个 nextContour 就是用于跳转到下一条曲线到方法,如果跳转成功,则返回 true, 如果跳转失败,则返回 false