2011-11-01 103 views
12

一段时间后,我问了一个问题,看看我是否能找到路径中的一对特定点;然而,这次我想知道是否有办法知道路径中的所有点? (我找不到这样做的方法,这是不幸的,因为Java提供了一种方法来做到这一点,而不是Android?)如何在Android中查找路径中的所有点?

我问这个的原因是因为我有多个几何图形,我想比较点看他们相交的地方。

我明白任何有用的反应

回答

2

如果您已经创建了一个Path这意味着在你的代码的某些时候,你知道确切的(GEO)点。你为什么不把这一点放在ArrayList或类似的东西上?

因此,例如在做之前:

path.lineTo(point.x, point.y); 

你可以这样做:

yourList.add(point); 
path.lineTo(point.x, point.y); 

,以后你可以从ArrayList你的所有的点。 请注意,您可以利用Enhanced For Loop SyntaxArrayList,其执行速度提高三倍。

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); 

或者这样:

+0

这就是我要做的事情,如果没有任何选择。我会将问题留待更多天,如果没有其他建议,我会接受这个答案。 – StartingGroovy

+0

@StartingGroovy好的,看看我的更新后的帖子,以便利用性能提升,如果你最终选择这个解决方案。 – Manos

+0

有趣的是,我没有意识到增强的for循环速度快了3倍:)感谢那些珍闻! – StartingGroovy

24

您可以使用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