Как позиционировать представление на основе положения одного из дочерних элементов ViewGroup?

Хорошо, вопрос может показаться запутанным. Позвольте мне объяснить сценарий:

Обратитесь к изображению по следующей ссылке (- я не смог использовать imgur, так как он заблокирован в моей сети): http://www.flickr.com/photos/93397745@N05/8494742266/

  • У меня есть CustomView, который расширяет RelativeLayout (вся черная часть изображения)
  • Этот CustomView содержит компонент в верхней части ViewTopBar (обозначен красным на изображении), который расширяет ViewGroup и прокручивается по горизонтали.
  • ViewTopBar содержит множество дочерних представлений. Одним из них является IndicatorView (оранжевый на изображении), который позиционируется в ViewTopBar после выполнения некоторых вычислений и вызова layout(l,t,r,b) в методе ViewTopBar onLayout().
  • Я хочу, чтобы вертикальная линия в 1 пиксель отображалась под IndicatorView. Он должен начинаться чуть ниже IndicatorView и покрывать всю высоту CustomView. (См. зеленую линию на изображении).
  • Эта часть не имеет значения, но просто для информации: синяя часть изображения — это еще одна пользовательская группа просмотра, которую довольно сложно описать. (Кроме того, есть еще несколько компонентов, которые являются частью CustomView, но не показаны на изображении, поскольку они не нужны для моего вопроса.)

Там, я надеюсь, я объяснил точку зрения. Теперь мне нужно, чтобы зеленая линия в 1 пиксель перемещалась горизонтально, чтобы оставаться выровненной ниже IndicatorView всякий раз, когда выполняется горизонтальная прокрутка. В настоящее время я реализовал это следующим образом:

  • Поместил линию 1px как дочернюю для CustomView.
  • Всякий раз, когда вызывается ViewTopBar onLayout(), я обновляю LayoutParams GreenLine и просто изменяю левое поле в зависимости от положения IndicatorView.

Это отлично работает большую часть времени. Но иногда, когда я непрерывно прокручиваю влево-вправо-влево-вправо, 1pxLine не синхронизируется с прокручиваемым IndicatorView (--Однако, как только прокрутка останавливается, она снова синхронизируется!) Итак, какие изменения мне нужно сделать? сделать так, чтобы линия оставалась синхронизированной даже во время операций прокрутки?

Пожалуйста, дайте мне знать, если кто-то был в состоянии сделать это раньше.

Спасибо,

-Киран


person Kiran Parmar    schedule 21.02.2013    source источник


Ответы (1)


Я бы взял IndicatorView из ViewTopBar и вместе с 1px-line-view включил бы его в макет контейнера, который вместо этого поместил бы внутрь CustomView. Таким образом, вы могли бы контролировать положение этого элемента в целом, вместо того, чтобы «догонять» один другой. Хотя не уверен, что это применимо в вашем случае.

person kar    schedule 21.02.2013
comment
Итак, позиция IndicatorView вычисляется из ViewTopBar. Для этого все это нужно было бы перенести в CustomView, что усложнит ситуацию в моем случае. Кроме того, при таком способе реализации проблема «наверстывания» будет наблюдаться с макетом контейнера и дочерними элементами ViewTopBar (как в настоящее время для IndicatorView и 1px-Line). Спасибо за вклад, хотя .. Я могу в конечном итоге использовать это, если ничего не работает, а задержка «догоняющего» не слишком заметна для макета контейнера! :) - person Kiran Parmar; 21.02.2013