博客
关于我
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
查看>>
MTK Android 如何获取系统权限
查看>>
MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
查看>>
MySQL - ERROR 1406
查看>>
mysql - 视图
查看>>
MySQL - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>