2013-07-15 2 views
1

Я размещаю ImageView булавки в центре макета, используя android:layout_centerInParent="true" в моем файле RelativaLayout XML.Что такое программно эквивалентно android: layout_centerInParent = "true" RelativeLayout?

enter image description here

Теперь я хотел бы обратить зеленую точку в том же положении, что и штифт на холсте.

ПРИМЕЧАНИЕ: Зеленая точка НЕ ​​является точкой зрения. Рисунок на картинке: canvas.drawCircle();

То есть, я должен программно получить координаты булавки.

Так как я могу получить координаты android:layout_centerInParent="true" с кодами?

ответ

1

Таким образом, холст вы рисуете, чтобы в целях, содержащейся в RelativeLayout, но вы хотите, чтобы нарисовать точку в центре RelativeLayout?

Да, это именно то, что я пытаюсь сделать!

Предполагая, что представление холста является прямым ребенком RealtiveLayout, это должно работать.

Вы можете получить центр макета, используя getWidth()/2 и getHeight()/2 на макете, как указано в других. Однако вам также нужно выяснить, где происхождение холста. Для этого вы можете просто использовать getLeft() и getTop() на холсте. Затем вы просто вычтите центр x слева и центр y сверху, чтобы получить свое последнее место.

Пример:

grid

Предположим, каждый линии сетки является 1. RelativeLayout - большой черный прямоугольник, а вид Canvas - синий. Координаты центральной точки: 4,6. Используя left/top, вы получите 1,4 для начала холста (красная точка). Вычитайте, и вы получите 3,2, которые являются локальными координатами холста для зеленой точки.

+0

То, что вы сказали, абсолютно верно. Это то, что я делаю. Но у меня есть другая проблема, когда я пытаюсь получить размеры макета, как предлагает @ Mazvél. Пожалуйста, любезно помогите! http://stackoverflow.com/questions/17646188/no-relativelayout-id-in-r-id-while-getting-dimensions-of-relativelayout –

0

Рисование точки в центре холста должно быть просто делением ширины и высоты представления на два. Если вы хотите, чтобы он находился у основания штифта (в отличие от истинного центра), просто добавьте половину высоты штифта к значению y круга.

+0

Нет. Мне нужна точка, чтобы быть в месте расположения булавки, которая НЕ является центром холста. Это центр взгляда. –

+0

Центр холста и центр зрения, как правило, одинаковы. В любом случае, разделение ширины и высоты представления, как я уже сказал, является центром представления. –

+0

В моем холсте содержится картинка. Кроме того, вы можете увидеть 4 кнопки ниже. Они не на холсте. Размер холста отличается от размера макета. –

2

Моя догадка

layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, 1); 

Вы можете получить layoutParams по relativeLayout.getLayoutParams(), и не забудьте setLayoutParams спину, когда вы закончите его модификации.

+0

Но моя зеленая точка - это не представление. Он нарисован на холсте! –

2

Чтобы получить ширину и высоту родителя, вы можете это сделать.

RelativeLayout parent = (RelativeLayout) findViewById(R.id.yourRelativeLayout); 
int width = parent.getWidth(); 
int height = parent.getHeight(); 

Тогда вы можете разделить эти цифры на 2 и установить, что в качестве координат вашей зеленой точки, и он должен появиться в середине экрана. Для этого размер вашего холста должен быть таким же, как и относительный макет.

Но будьте осторожны, вам необходимо вызвать методы getWidth() и getHeight() после того, как было создано действие, иначе вы получите нулевое значение. See this answer

+0

_Для этого для работы размер вашего холста должен быть таким же, как и относительный макет. Здесь возникает моя проблема! Поскольку мой холст содержит изображение, размер холста НЕ совпадает с макетом. Вы также можете видеть кнопки там. Они НЕ на холсте. Размер холста отличается от размера макета. Так как? –

+0

'parent' является' null' при запуске. 'NullPointerException'. Зачем? –

+0

О, извините, я неправильно скорректировал ваши коды. u r right, это должно быть 'R.id'. Но почему в моем «R.id» у меня есть только кнопки, текстовые изображения, но нет макета? –

Смежные вопросы