У меня каверзная проблема, связанная с синхронизированной прокруткой двух разных представлений.Я сделал свой собственный виджет вида сетки, который имеет "липкие" виды слева и сверху, только в одном направлении с сеткой.Подумайте о календаре, где у вас есть время вверху, даты слева, и когда вы прокручиваете по горизонтали во времени, представление даты должно оставаться на месте, а когда вы прокручиваете даты по вертикали, представление времени должно оставаться на месте.
Сама сетка реализована с использованием вложенной горизонтальной прокрутки в вертикальной прокрутке.Сетка работает отлично, поэтому проблем нет.Поскольку липкие виды не находятся в реальной сетке, я переопределил onScrollChanged в виде сетки прокрутки и программно вызываю scrollTo для липких видов, когда пользователь прокручивает сетку.
Это работает, как и ожидалось, за исключениемнебольшое смещение по времени, когда два разных вида начинают прокручиваться и заканчивают прокрутку.Это имеет смысл, если учесть, что, скорее всего, прокрутка выполняется линейно в потоке пользовательского интерфейса.
Все представления являются представлениями прокрутки, и я вместо этого включил плавную прокрутку и использовал smoothScrollTo и т. Д., Чтобы попытатьсяулучшить это, но это та же проблема, тем не менее.Эта проблема особенно заметна на больших экранах, таких как Samsung Galaxy Tab, тогда как на устройствах с экранами среднего размера она едва заметна.
Любая помощь приветствуется!Если есть простое исправление, замечательно ... если это означает новый дизайн (который соответствует приведенному выше сценарию с липким представлением), то пусть будет так.
Код для запуска прог.прокрутка, то же самое для горизонтальной
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
mListener.onScrollY(y);
super.onScrollChanged(x, y, oldx, oldy);
}
// which leads to,
// Handle vertical scroll
public void onScrollY(final int y) {
mCurrentY = y;
mVerticalScroll.smoothScrollTo(0, y);
}
макетов XML ниже, если это поможет
Фактическая сетка, которая представляет собой горизонтальную прокрутку, обернутую в вертикальную прокрутку, и элементы сеткидобавлено вертикально во вложенный линейный макет
>
< com.....VerticalScrollView
android:id="@+id/gridscroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/timescroll"
android:layout_toRightOf="@id/vertscroll"
android:layout_alignTop="@id/vertscroll"
android:layout_marginLeft="2dp" android:scrollbars="none"
android:fadingEdge="none">
< com....HorizScrollView
android:id="@+id/horizscroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
android:fadingEdge="none">
< LinearLayout android:id="@+id/grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
< /LinearLayout>
< /com.....HorizScrollView>
< /com.....VerticalScrollView>
Горизонтальное липкое изображение
< com.....GridTimeScrollView
android:id="@+id/timescroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
android:fadingEdge="none">
< LinearLayout android:id="@+id/timelist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" />
< /com.....GridTimeScrollView>
Вертикальное липкое изображение
< com....GridVertListScrollView
android:id="@+id/vertscroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
android:fadingEdge="none">
< LinearLayout
android:id="@+id/vertitemlist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" />
< /com.....GridVertListScrollView>