как получить координаты вида в ограничении - PullRequest
0 голосов
/ 28 октября 2018

У меня есть семь кнопок в вертикальной цепочке, используя макет ограничения по горизонтали.
Во время выполнения я изменяю размер моих кнопок так, чтобы они помещались между панелью приложения и панелью навигации.Я также размещаю горизонтальную направляющую (guide1), чтобы начать в нижней части панели приложения, а другую направляющую, guide2, в верхней части панели навигации.Я ограничил верхнюю кнопку (1 или 7) направляющей 1, а нижнюю кнопку (7 из 7) - направляющей 2.

В течение того же времени выполнения я могу вытянуть новую ширину кнопкивызывая следующий метод.

int  getwidth(Button btn){
    ConstraintLayout.LayoutParams newLayoutParams = (ConstraintLayout.LayoutParams) btn.getLayoutParams();
    int btnwidth=newLayoutParams.width;
     return btnwidth;
}

Я также пытаюсь получить экранные координаты каждой из кнопок, после того как я измерил их размеры, как описано выше.Я пытался использовать btn.getTop ();но результаты возвращаются неверно.
Я подозреваю, что он вытягивает число, основанное на настройках ограничений в моем xml.В конечном итоге я пытаюсь получить координаты центра каждой из кнопок.Я использую ширину сверху (кнопки - круги) и добавлю к ним координаты для расчета центров.Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 29 октября 2018

Я обнаружил, что я делал неправильно.Я использовал следующее, чтобы получить центральные точки.

 final int lineStartX = ((ConstraintLayout.LayoutParams) vBtn1.getLayoutParams()).leftMargin + (vBtn1.getMeasuredWidth() / 2)+vBtn1.getLeft();
            final int lineStartY = ((ConstraintLayout.LayoutParams) vBtn1.getLayoutParams()).topMargin + (vBtn1.getMeasuredHeight() / 2)+vBtn1.getTop();
            final int lineEndX = ((ConstraintLayout.LayoutParams) vBtn2.getLayoutParams()).leftMargin + (vBtn2.getMeasuredWidth() / 2)+vBtn2.getLeft();
            final int lineEndY = ((ConstraintLayout.LayoutParams) vBtn2.getLayoutParams()).topMargin + (vBtn2.getMeasuredHeight() / 2)+vBtn2.getTop();
...