Нам всем посоветовали против вложенных представлений, содержащих механизм прокрутки. Однако в последней версии Android (5.0) приложение Phone привлекло мое внимание тем, что кажется ListView
внутри ScrollView
.Бесшовная вложенная прокрутка (Android)
Что действительно заинтриговало меня в том, что механизм прокрутки переключился с ScrollView
на ListView
без проблем. Демо-версия: https://dl.dropboxusercontent.com/u/244748/recording.mp4.
Обратите внимание, что содержимое над вкладками выталкивается из вида до фактического начала прокрутки ListView
.
Я пробовал дублировать это сам, но оказался неудачным. Вот основной подход, который я принимал ...
С одной непрерывного событием касания (без подъема пальца) ...
Как пользователь прокручивает, то ListView
медленно покрывает ImageView
. Как только ImageView
покрыт 100%, а ListView
занимает весь экран, начнет прокручиваться ListView
.
Я сейчас слушаю коснуться событий на ListView
и если вершина была достигнута, называют requestDisallowInterceptTouchEvent
на ListView
, т.е.
@Override
public boolean onTouch(View v, MotionEvent event) {
if (listViewAtTop) {
v.requestDisallowInterceptTouchEvent(true);
} else {
v.requestDisallowInterceptTouchEvent(false);
}
return false;
}
коммутационного прокрутки контекста работает, только если вы поднимите палец и продолжить прокрутку.
Есть ли другой подход, который достигнет желаемого эффекта?
Как насчет проблемы, что listview не заполняет ее высоту таким образом? – whizzzkey
@whizzzkey .. Попробуйте добавить android: fillViewport = "true" для вашего ScrollView. –