Я использую HorizontalScrollView
в одном из моих макетов и заменил дорожку полосы прокрутки и большой палец, переопределив соответствующие атрибуты xml, так что дорожка представляет собой миниатюры представлений в пределах HorizontalScrollView
, а большой палец указывает текущая позиция.
Пока все работает нормально, и я могу прокручивать вид. Однако я не могу использовать полосу прокрутки, т. Е. Дорожку и большой палец для прокрутки, я могу только прокручивать с помощью бросков поверх всего представления. Каждый щелчок / бросок в верхней части полосы прокрутки просто интерпретируется как щелчок / бросок в другом месте в HorizontalScrollView
. Другими словами, я не могу перетащить большой палец и, таким образом, изменить положение, а также не могу перейти к определенной позиции, щелкнув где-нибудь на дорожке полосы прокрутки.
Вот мой макет:
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:scrollbarFadeDuration="0"
android:scrollbarThumbHorizontal="@drawable/highlight_box"
android:scrollbarTrackHorizontal="@drawable/tumbnail_chain" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >
...couple of FrameLayouts
</LinearLayout>
</HorizontalScrollView>
К сожалению, я пока не нашел решения этой проблемы
EDIT:
Я только что узнал, что полоса прокрутки не должна работать в Android, смотрите
здесь
У кого-нибудь есть идея, как я могу реализовать желаемое поведение, описанное выше? Код не нужен, просто предложения!
РЕДАКТИРОВАТЬ 2 (Обходной путь):
Для тех, кто заинтересован в моем решении: я поместил прозрачный фиктивный вид поверх полосы прокрутки того же размера и установил OnTouchListener
для этого вида. В методе onTouch
слушателя я затем вычисляю относительную позицию события касания, касающуюся трек-бара, а затем перехожу к той же относительной позиции в пределах HorizontalScrollView
с помощью метода scrollTo
:
public boolean onTouch (View v, MotionEvent event) {
int x = Math.round((event.getX() / mScrollbarWidth) * mScrollViewWidth);
mScrollView.scrollTo(x, 0);
return true;
}
, где mScrollBarWidth - ширина полосы прокрутки (по существу, ширины экрана), а mScrollViewWidth - ширина HorizontalScrollView
в целом. Поскольку этот метод вызывается непрерывно во время прикосновения к фиктивному виду, вы можете не только перейти в положение, к которому вы прикоснулись, вы также можете перетащить большой палец на полосу прокрутки.