博客
关于我
Android开发之PathMeasure的基本用法
阅读量:788 次
发布时间:2019-03-24

本文共 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/

你可能感兴趣的文章
python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
查看>>
python3与django中@property详解
查看>>
python3中如何表示无穷大
查看>>
Python3中提示:no module named 'wxpy'
查看>>
python3中选择文件对话框的格式打开和保存图片
查看>>
python3为什么print永远都是地址_Python3 print 函数用法总结
查看>>
Python3之uuid模块
查看>>
Python3之写入Excel文档(xlsxwriter)
查看>>
Python3之打印操作打印流重定向(下)
查看>>
python3判断字典、列表、元组为空以及字典是否存在某个key的方法
查看>>
Python3利用pymysql操作 MySQL
查看>>
python3处理json文件中含有中文dumps的应用
查看>>
Python3子进程输出
查看>>
Python3学习笔记3,变量、运算符
查看>>
Python3学习笔记(urllib模块的使用)
查看>>
python3安装scapy_Linux下安装scapy-python3
查看>>
python3实现socket通信
查看>>
Python关于numpy.transpose函数详细解析附代码
查看>>
Python3导入自定义模块的3种方式
查看>>
python3打开txt文件_使用Python 3从文本文件读取句子并添加到列表中
查看>>