Прокрутка просмотра происходит после положения прокрутки касанием

У меня есть индивидуальные 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);
Другие вопросы по тегам