一段时间后,我问了一个问题,看看我是否能找到路径中的一对特定点;然而,这次我想知道是否有办法知道路径中的所有点? (我找不到这样做的方法,这是不幸的,因为Java提供了一种方法来做到这一点,而不是Android?)如何在Android中查找路径中的所有点?
我问这个的原因是因为我有多个几何图形,我想比较点看他们相交的地方。
我明白任何有用的反应
一段时间后,我问了一个问题,看看我是否能找到路径中的一对特定点;然而,这次我想知道是否有办法知道路径中的所有点? (我找不到这样做的方法,这是不幸的,因为Java提供了一种方法来做到这一点,而不是Android?)如何在Android中查找路径中的所有点?
我问这个的原因是因为我有多个几何图形,我想比较点看他们相交的地方。
我明白任何有用的反应
如果您已经创建了一个Path
这意味着在你的代码的某些时候,你知道确切的(GEO)点。你为什么不把这一点放在ArrayList
或类似的东西上?
因此,例如在做之前:
path.lineTo(point.x, point.y);
你可以这样做:
yourList.add(point);
path.lineTo(point.x, point.y);
,以后你可以从ArrayList
你的所有的点。 请注意,您可以利用Enhanced For Loop Syntax的ArrayList
,其执行速度提高三倍。
PathMeasure pm = new PathMeasure(myPath, false);
//coordinates will be here
float aCoordinates[] = {0f, 0f};
//get point from the middle
pm.getPosTan(pm.getLength() * 0.5f, aCoordinates, null);
或者这样:
您可以使用PathMeasure
获得任意点的坐标上path.For例如这个简单的代码段(即我看到here)在路径的一半返回点的坐标片断返回FlaotPoint
s.That阵列的阵列包括在路径上的20点的坐标:
private FlaotPoint[] getPoints() {
FlaotPoint[] pointArray = new FlaotPoint[20];
PathMeasure pm = new PathMeasure(path0, false);
float length = pm.getLength();
float distance = 0f;
float speed = length/20;
int counter = 0;
float[] aCoordinates = new float[2];
while ((distance < length) && (counter < 20)) {
// get point from the path
pm.getPosTan(distance, aCoordinates, null);
pointArray[counter] = new FlaotPoint(aCoordinates[0],
aCoordinates[1]);
counter++;
distance = distance + speed;
}
return pointArray;
}
在上面的代码中,FlaotPoint
是一个封装的点的坐标的类:
class FlaotPoint {
float x, y;
public FlaotPoint(float x, float y) {
this.x = x;
this.y = y;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
}
参考:
stackoverflow
Animating an image using Path and PathMeasure – Android
这就是我要做的事情,如果没有任何选择。我会将问题留待更多天,如果没有其他建议,我会接受这个答案。 – StartingGroovy
@StartingGroovy好的,看看我的更新后的帖子,以便利用性能提升,如果你最终选择这个解决方案。 – Manos
有趣的是,我没有意识到增强的for循环速度快了3倍:)感谢那些珍闻! – StartingGroovy