CollapsingToolbarLayout без onTouch? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь понять, как работает какой-то вид.Я начинаю читать исходный код CollapsingToolbarLayout.Но я в замешательстве, в нем нет функции onTouch, в то время как нам нужно дотронуться до нашего экрана, чтобы развернуть / свернуть представление.

Так как CollapsingToolbarLayout можно свернуть / развернуть с помощью нашего пальца, но нет метода переопределения onTouch?

Может кто-нибудь объяснить мне?

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Это связано с тем, что onTouch - не единственный способ взаимодействия с представлениями.

Для CollapsingToolbarLayout сначала необходимо понять, что он предназначен для использования в качестве дочернего элемента AppBarLayout.

AppBarLayout - это почти вертикальная LinearLayout, которая используется для реализации множества функций, относящихся к Material Design, включая функции прокрутки.Другими словами, этот макет - это то, что обрабатывает прокрутку для дочернего представления.

В источнике CollapsingToolbarLayout посмотрите на метод onAttachedToWindow().Внутри этого метода вы увидите, что если родителем этой панели инструментов является AppBarLayout, то он установит пользовательский OffsetUpdateListener в метод addOnOffsetChangedListener() своего родителя.Посмотрите дальше вниз на источник, чтобы увидеть определение его OffsetUpdateListener.

То, что он делает, CollapsingToolbarLayout говорит своему родителю (AppBarLayout), чтобы сказать себе, есть ли какие-либо изменения в 'смещении', котороепрокрутка

Так что CollapsingToolbarLayout не нужно иметь переопределение 'OnTouch', потому что оно не обрабатывает прикосновения или прокрутку.Он просто позволяет своему родителю обрабатывать прокрутку, в то время как он просто сообщает родителю, чтобы он знал, когда он должен реагировать, другими словами ... когда он должен свернуться или развернуться.

0 голосов
/ 16 января 2019

По сути, CollapsingToolbarLayout - это не View, а ViewGroup. Он наследуется от FrameLayout и действует как контейнер для AppBarLayout, когда необходимо, чтобы часть обзора была свернута / развернута на основе поведения прокрутки панели приложения .

Итак, это оболочка для Toolbar, которая реализует сворачивающуюся панель приложения. Он предназначен для использования в качестве прямого потомка AppBarLayout.


Теперь на ваш вопрос:

" Так как CollapsingToolbarLayout можно свернуть / развернуть с помощью нашего пальца, но нет метода переопределения onTouch? "

Ответ прост, это не так. Это AppBarLayout, который перехватывает событие касания на основе слушателя OffsetChange и передает обратные вызовы его потомкам. CollapsingToolbarLayout имеет возможность анимировать заголовок панели инструментов (свернуть / развернуть) и некоторые другие вещи, такие как фоновый рисунок, закрепление заголовка и т. Д., Поэтому он в основном реагирует на *1030* слушателя OffsetChange * при получении обратных вызовов.

Проверьте официальный справочник для более подробной информации.

0 голосов
/ 16 января 2019

они используют OnOffsetChangedListener, который является определением интерфейса для обратного вызова, который вызывается при изменении вертикального смещения AppBarLayout.

onOffsetChanged Вызывается, когда смещение макета AppBarLayout было изменено. Это позволяет дочерним представлениям реализовывать пользовательское поведение на основе смещения (например, закрепление представления с определенным значением y).

вот ссылка OnOffsetChangedListener

...