博客
关于我
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/

你可能感兴趣的文章
MySQL面试宝典
查看>>
mysql面试题学校三表查询_mysql三表查询分组后取每组最大值,mysql面试题。
查看>>
Mysql面试题精选
查看>>
MySQL面试题集锦
查看>>
mysql面试题,存储引擎InnoDB和MyISAM
查看>>
mysql面试题:为什么MySQL单表不能超过2000W条数据?
查看>>
mysql面试题:创建索引时会不会锁表?
查看>>
mysql面试题:高度为3的B+树可以存放多少数据?
查看>>
mysql颠覆实战笔记(八)--mysql的自定义异常处理怎么破
查看>>
mysql驱动、durid、mybatis之间的关系
查看>>
mysql驱动支持中文_mysql 驱动包-Go语言中文社区
查看>>
MySQL高可用之——keepalived+互为主从
查看>>
MySQL高可用切换_(5.9)mysql高可用系列——正常主从切换测试
查看>>
MySQL高可用解决方案详解
查看>>
MYSQL高可用集群MHA架构
查看>>
MySQL高级-MySQL存储引擎
查看>>
MySQL高级-MySQL并发参数调整
查看>>
MySQL高级-MySQL应用优化
查看>>
MySQL高级-MySQL查询缓存优化
查看>>
MySQL高级-MySQL锁
查看>>