Как найти все точки в пути в Android?
В то же время я задал вопрос, могу ли я найти пару конкретных точек в пути; однако, на этот раз я хочу знать, есть ли способ узнать все точки пути? (Я не мог найти метод, который сделал это, что является неудачным, потому что Java предоставляет способ сделать это, а не Android?)
Я прошу об этом, потому что у меня есть несколько геометрических графов, и я хочу сравнить точки, чтобы увидеть, где они пересекаются.
Я ценю любые полезные ответы
Ответы
Ответ 1
Если вы создали Path
, это означает, что в некоторой точке вашего кода вы знаете точную точку (Geo). Почему бы вам не поставить эту точку на ArrayList
или что-то подобное?
Так, например, перед выполнением:
path.lineTo(point.x, point.y);
вы можете сделать:
yourList.add(point);
path.lineTo(point.x, point.y);
И позже вы можете получить все свои очки из ArrayList
.
Обратите внимание, что вы можете использовать Enhanced For Loop Syntax ArrayList
, которые выполняются в три раза быстрее.
Ответ 2
Вы можете использовать PathMeasure
чтобы получить координаты произвольной точки на пути. Например, этот простой фрагмент (который я видел здесь) возвращает координаты точки на половине пути:
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);
Или этот фрагмент возвращает массив FloaPoint
Этот массив включает в себя координаты 20 точек на пути:
private FloatPoint[] getPoints() {
FloatPoint[] pointArray = new FloatPoint[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 FloatPoint(aCoordinates[0],
aCoordinates[1]);
counter++;
distance = distance + speed;
}
return pointArray;
}
В приведенном выше фрагменте FloatPoint
является классом, который инкапсулирует координаты точки:
class FloatPoint {
float x, y;
public FloatPoint(float x, float y) {
this.x = x;
this.y = y;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
}
Рекомендации:
переполнение стека
Анимация изображения с помощью Path и PathMeasure - Android