本文共 2537 字,大约阅读时间需要 8 分钟。
PathMeasure测量类
PathMeasure是Android图形库中用于测量路径长度的强大工具,支持闭合和非闭合路径的测量。它能够帮助开发者快速获取路径数据,节省手动计算的时间。这一功能在绘图、游戏开发等场景中都有广泛应用。
forceClosed参数的作用
PathMeasure(path, false);默认情况下,measure.isClosed()返回的值与path的闭合状态有关。如果想要强制闭合路径,无论Path本身是否闭合,可以通过forceClosed属性来处理。例如,forceClosed=true时,measure.getLength()将包括路径的闭合部分的测量结果。这一功能特别有用,当路径并非闭合时,仍能完整测量所有边线。
我们来看看实际案例
代码示例:
import android.content.Context;
import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PathMeasure;import android.util.Log;import android.view.View;public class CustomView extends View {
private Paint paint;private int mViewHeight;private int mViewWidth;public CustomView(Context context) { super(context); paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(10); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mViewHeight = h; mViewWidth = w; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.translate(mViewWidth / 2, mViewHeight / 2); Path path = new Path(); path.lineTo(0, 200); path.lineTo(200, 200); path.lineTo(200, 0); PathMeasure measure1 = new PathMeasure(path, false); PathMeasure measure2 = new PathMeasure(path, true); Log.i("---length1---", measure1.getLength() + ""); Log.i("---length2---", measure2.getLength() + ""); canvas.drawPath(path, paint); }
}
运行效果图:
接下来看看PathMeasure的其他方法
nextContour属性
代码示例:
Path path = new Path();
path.addRect(-200, -200, 200, 200, Path.Direction.CW);path.addRect(-100, -100, 100, 100, Path.Direction.CW);PathMeasure measure = new PathMeasure(path, false);
float length1 = measure.getLength();boolean nextContour = measure.nextContour();float length2 = measure.getLength();运行效果图:
截取路径片段
代码示例:
Path path = new Path();
path.addRect(-200, -200, 200, 200, Path.Direction.CW);PathMeasure measure = new PathMeasure(path, false);
float length = measure.getLength();Path path1 = new Path();
measure.getSegment(200, 600, path1, false);measure.getSegment(200, 600, path1, true);运行效果图:
getPosTan方法
代码示例:
Path path = new Path();
path.addCircle(0, 0, 300, Path.Direction.CW);PathMeasure measure = new PathMeasure(path, false);
float[] pos = new float[2];float[] tan = new float[2];measure.getPosTan(measure.getLength() / 4, pos, tan);
运行效果图:
通过PathMeasure可以轻松获取路径的直角斜率和位置信息,这在绘图、物理仿真等场景下都有实用价值。
转载地址:http://tnikk.baihongyu.com/