Координаты для просмотра внутри пользовательского представления вообще не совпадают.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Координаты для просмотра внутри пользовательского представления вообще не совпадают.

Сообщение Anonymous »

Я работаю над приложением, похожим на генеалогическое древо. Я использую алгоритм принудительной компоновки для расчета позиций, в которых будут размещены узлы. Узлы представляют собой созданное мной собственное представление под названием PersonCard. Вот фрагмент моей PersonCard:

Код: Выделить всё

private void init(AttributeSet attrs) {
// Initialize anchors
rightAnchor = new View(getContext());
int anchorColor = ContextCompat.getColor(getContext(), R.color.tea_rose);
int anchorSize = 10;
rightAnchor.setBackgroundColor(anchorColor);

FrameLayout.LayoutParams rightAnchorParams = new FrameLayout.LayoutParams(anchorSize, anchorSize);
rightAnchorParams.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
rightAnchorParams.rightMargin = -padding;
rightAnchor.setLayoutParams(rightAnchorParams);

addView(rightAnchor);
}
Поскольку мне нужно будет соединить эти разные карты PersonCard, я создал разные привязки (по одному на каждой стороне PersonCard), чтобы единые места, где я могу соединить свои PersonCard с представлением Line.
После того, как алгоритм вычислил позиции для каждой PersonCard, я получаю координаты x и y, как показано ниже, и разместите PersonCards соответственно:

Код: Выделить всё

Node 1: (489.70685469968083, 1534.7124300016587)
Node 2: (995.1782137460826, 731.7942097127028)
Node 3: (58.578329522505925, 716.785942983157)
Node 4: (534.2392750542016, 996.037653894383)
Node 5: (43.46557962124075, 1243.6774403463626)
Node 6: (530.856915894992, 454.41864708395013)
Node 7: (978.3108846322139, 1287.7832880796614)
В моей PersonCard я создал методы для получения положения привязок:

Код: Выделить всё

private int[] getAnchorPosition(ViewGroup parent, View anchor) {
int[] anchorPosition = new int[2];
int[] parentPosition = new int[2];

anchor.getLocationOnScreen(anchorPosition);

parent.getLocationOnScreen(parentPosition);

anchorPosition[0] -= parentPosition[0];
anchorPosition[1] -= parentPosition[1];

Log.d("AnchorPosition", "Anchor X: " + anchorPosition[0] + ", Y: " + anchorPosition[1]);
return anchorPosition;
}

public int[] getRightAnchorPosition(ViewGroup parent) {
return getAnchorPosition(parent, rightAnchor);
}
Однако как может быть, что этот метод дает мне совершенно неправильные координаты? Когда я его вызываю, он дает мне что-то вроде этого для правого привязки узла 1:

Код: Выделить всё

Node 1: X is: 200, Y is: 203
Как видите, это совершенно не соответствует реальным координатам узла 1. И по какой-то странной причине все остальные правые привязки PersonCard имеют одинаковые координаты?

Код: Выделить всё

Node 2: X is: 200, Y is: 203
Node 3: X is: 200, Y is: 203
Node 4: X is: 200, Y is: 203
and so on...
Я не знаю, откуда такое странное поведение. Что касается моего макета, я просто добавляю свои PersonCards в FrameLayout, который является дочерним элементом другого FrameLayout.
Чтобы не упасть для некоторых махинаций с вычислениями макета я использовал .post, чтобы убедиться, что мой макет завершил вычисления, прежде чем я вызову getRightAnchorPosition:

Код: Выделить всё

personCard.post(new Runnable() {
@Override
public void run() {
int[] rightAnchorPos = personCard.getRightAnchorPosition(origin_frameLayout);
Log.d("RightAnchor", "X is: " + rightAnchorPos[0] + ", Y is: " + rightAnchorPos[1]);
}
});
Однако это по-прежнему дает мне те же координаты, которые я показал выше.
Почему именно я получаю такое странное поведение и как я могу исправить?

Подробнее здесь: https://stackoverflow.com/questions/791 ... tch-at-all
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»