Прокрутка просмотра происходит после положения прокрутки касанием
У меня есть индивидуальные View
в приложении для Android, который находится внутри HorizontalScrollView
как показано.
<HorizontalScrollView
android:id="@+id/feedBackScroller"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none">
<com.my.views.OfflineFeedbackView
android:id="@+id/feedBackView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/session_rec_page_title_bar_height"
android:layout_marginBottom="@dimen/session_rec_page_ctrl_bar_height"/>
</HorizontalScrollView>
OfflineFeedbackView
показывает высоту звука звуковой дорожки, которую я играю, и я прокручиваю это представление, вызывая scrollTo(newXPos, newYPos)
на основе текущего времени воспроизведения. Проблема, с которой я сталкиваюсь, заключается в том, что, если я прокручиваю экран, касаясь, а затем запускаю воспроизведение, на моем экране видимость прокрутки, похоже, меняется, и прокрутка происходит от положения, до которого я прокручивалась прикосновением. Я просмотрел документы API и обнаружил, что scrollTo(newXPos, newYPos)
внутренние звонки onScrollChanged(int l, int t, int oldl, int oldt)
где oldl
а также oldt
старые горизонтальные и вертикальные истоки соответственно. Итак, что я интерпретирую из этого, так это то, что при прокрутке касанием экрана эти исходные значения меняются. Итак, я также попытался позвонить onScrollChanged(newX, newY, 0, 0)
но это просто замораживает экран и нет прокрутки. Я делаю что-то неправильно? Какие могут быть другие лучшие способы справиться с этим?
1 ответ
Здесь проблема выглядит так, как вы сказали, что HorizontalScrollView позиции меняется при прикосновении.
Таким образом, одно решение может быть найти начальную верхнюю левую позицию вашего представления прокрутки
HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.ScrollView);
int x, y;
x = hsv.getLeft();
y = hsv.getTop();
и всегда прокручивайте свое дочернее представление относительно этих сохраненных положений x,y, т.е.
childView.scrollTo(x+newXPos,y+newYPos);