Я использую HorizontalScrollView
в одном из своих макетов и заменил дорожку полосы прокрутки и большой палец, переопределив соответствующие атрибуты xml, чтобы трек представлял миниатюры представлений в пределах HorizontalScrollView
и большой палец указывает текущее положение.Android - Сделать полосу прокрутки в HorizontalScrollView clickable
Это прекрасно работает до сих пор, и я могу прокручивать изображение. Тем не менее, я не могу использовать полосу прокрутки, т. Е. Дорожку и большой палец для прокрутки, я могу прокручивать только прокрутки поверх всего представления. Каждый щелчок/бросок поверх полосы прокрутки просто интерпретируется как щелчок/бег в другом месте в 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, см. here
Есть ли у кого-нибудь идея, как я мог бы реализовать желаемое поведение, описанное выше? Никакой код не нужен, просто предложения!
EDIT 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
. Поскольку этот метод вызывается непрерывно во время касания манекена, вы можете не только перейти к позиции, которую вы коснулись, вы также можете перетащить большой палец на полосу прокрутки.
Я не думаю, что события касания перехватываются, так как прокрутка через fling работает по желанию, просто прокрутка не может использоваться для прокрутки, как можно было бы ожидать от приложений, отличных от android. Возможно, я не совсем сформулировал свой вопрос достаточно ясно. – Schnodahipfe
Я отредактировал can question, hopefully, теперь он более согласован – Schnodahipfe