2012-02-13 3 views
0

Я использую 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. Поскольку этот метод вызывается непрерывно во время касания манекена, вы можете не только перейти к позиции, которую вы коснулись, вы также можете перетащить большой палец на полосу прокрутки.

ответ

1

Я думаю, что событие touch на HorizontalScrollView перехвачено любым родительским представлением или макетом. сделайте объект HorizontalScrollView в java-файле и вызовите на нем следующий код:

view.getParent().requestDisallowInterceptTouchEvent(true); //view being the object of scrollview 

Это может сработать.

+0

Я не думаю, что события касания перехватываются, так как прокрутка через fling работает по желанию, просто прокрутка не может использоваться для прокрутки, как можно было бы ожидать от приложений, отличных от android. Возможно, я не совсем сформулировал свой вопрос достаточно ясно. – Schnodahipfe

+0

Я отредактировал can question, hopefully, теперь он более согласован – Schnodahipfe

1

У меня подобная ситуация, большой документ для отображения (нотная запись в моем случае) и вы хотите использовать перетаскивание полосы прокрутки (в дополнение к обычным перетаскиваниям и сбросу), чтобы пользователь мог произвольно получить доступ к любой части doc без часов прокрутки.

Я думаю, что еще одним простым решением является просмотр положения касания в onScroll и onFling, и если вы обнаружите, что находитесь над полосой прокрутки, выполните ручную прокрутку. У меня есть моя полоса прокрутки, чтобы никогда не исчезать так легко для меня.

Смежные вопросы