没有onTouch的CollapsingToolbarLayout?

时间:2019-01-16 07:31:39

标签: android android-collapsingtoolbarlayout

我试图了解某些视图的工作原理。我开始阅读CollapsingToolbarLayout的源代码。但是我很困惑,其中没有onTouch功能,而我们需要触摸屏幕以扩展/折叠视图。

那么如何用手指折叠/扩展CollapsingToolbarLayout却没有覆盖onTouch方法?

有人可以向我解释吗?

3 个答案:

答案 0 :(得分:1)

它们使用OnOffsetChangedListener,这是当AppBarLayout的垂直偏移更改时要调用的回调的接口定义。

onOffsetChanged在更改AppBarLayout的布局偏移量时调用。这样,子视图就可以基于偏移量实现自定义行为(例如,将视图固定在某个y值)。

这是参考文献OnOffsetChangedListener

答案 1 :(得分:1)

这是因为onTouch并不是与Views交互的唯一方法。

对于CollapsingToolbarLayout,您首先需要了解它被设计为AppBarLayout的子代。

AppBarLayout几乎是一个垂直的LinearLayout,用于实现许多属于Material Design的功能,包括滚动功能。换句话说,此布局是处理子视图的滚动的方式。

CollapsingToolbarLayout的源中,查看onAttachedToWindow()方法。在此方法内部,您将看到,如果此工具栏的父级是AppBarLayout,则它将在其父级的OffsetUpdateListener方法中设置一个自定义的addOnOffsetChangedListener()。向下查看源代码,以查看其OffsetUpdateListener的定义。

这是CollapsingToolbarLayout的意思,是告诉其父项(AppBarLayout)告诉自己“滚动”的“偏移”是否有任何变化。

因此CollapsingToolbarLayout不需要'OnTouch'替代,因为它不处理触摸或滚动。它只是允许它的父级处理滚动,而只是告诉父级何时应该做出反应,换句话说,是什么时候应该折叠或展开。

答案 2 :(得分:1)

基本上,CollapsingToolbarLayout不是View,而是ViewGroup。它基于{strong>应用栏的滚动行为 ,从FrameLayout继承并用作AppBarLayout的容器,当某些视图需要折叠/展开时。< / p>

因此,它是Toolbar的包装器,用于实现折叠的应用程序栏。它被设计用作AppBarLayout的直接子代。


现在提出您的问题:

那么如何CollapsingToolbarLayout可以用手指折叠/展开,但是没有覆盖onTouch的方法呢?

答案很简单,事实并非如此。 AppBarLayout本身会根据 OffsetChange侦听器拦截触摸事件,并将回调传递给它的后代。 CollapsingToolbarLayout可以为工具栏标题(折叠/展开)和其他一些东西(例如,背景模糊,标题固定等)设置动画,因此,基本上,它可以响应AppBarLayout OffsetChange侦听器收到回调时。

查看official reference了解更多详细信息。