androidnestedscrollview的简单介绍
本篇文章给大家谈谈androidnestedscrollview,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Android高级ui13-nestedscrollview嵌套滚动机制
- 2、android scrollview 和 nestedscrollview的区别
- 3、NestedScrollView使用和理解
Android高级ui13-nestedscrollview嵌套滚动机制
学习笔记,整理中;
面:
android.overridePathCheck = true
自己思路整理:
1、MyNestedScrollChildLextends LinearLayoutimplements NestedScrollingChild
onTouchEvent主要处理此方法,在action_down中 startNestedScroll开始找寻父级的嵌套滚动view; 在action_move中dispatchNestedPreScroll 先分发给父级消费,返回true父级消费完再回来。如果需要二次问滚旦询则不要pre,还是先问再回来;action_up处理stopNestedScroll 以及fling 惯性滚动,逻辑类似
2、MyNestedScrollParentLextends LinearLayoutimplements NestedScrollingParent
onNestedPreScroll主要处理此方法,注意要处理消费和滚动,并且过度滚动情况
3、NestedScrollingParentHelper helper --里面已处理大部分情况
---------------------------------------------------------------------------------------------------------
摘要:
嵌套滑动机制
NestedScrollView 属于MD控件
分析嵌套滑动机制 原理
事件序列
down - ..... move - up/cancel
1. view down没有消费,那么后续的move 没办法再接收到了
分发
activity - viewgroup - view
消费
view - viewgroup - activity
嵌套滑动大铅扰
mTouchslop 最小滑动距离
canScrollVertically(-1) 0
scrollBy 移动屏幕
传统的事件冲突解决方案
OverScroller
为什么需要
嵌套滑动机制 并没有改变事件分发机制
NestedScrollingParentLayout extends LinearLayout implements NestedScrollingParent
NestedScrollingParent接口 可滑动的viewgroup 充当父view
NestedScrollingChild接口 充当子view
孔融让梨
1. -》 父亲 dispatchNestedPreScroll
激咐 1. 全部吃了
2. 咬一口 还要剩余
2. 孔融再吃
1. 全部吃完
2. 咬两口 还要剩余
-》 父亲 dispatchNestedScroll
1. 全部吃了
2. 又咬一口 还要剩余
2. 孔融再吃2
1. 全部吃完
int type 事件类型:
touch
fling
NestedScrollView
1. 梳理了事件分发机制
2. 为什么需要嵌套滑动机制 解决传统事件滑动机制的bug
3. 介绍了NestedScrollingParent NestedScrollingChild
NestedScrollingChildHelper
NestedScrollingParentHelper
内容:
android scrollview 和 nestedscrollview的区别
android scrollview 和 nestedscrollview的区别:
应该说在MD中,用RecyclerView代替了ListView,而NestedScrollView代替了ScrollView,他们两个都可以用来跟ToolBar交互,实现上拉下滑中ToolBar的变化。在NestedScrollView的名空备并字斗迹中其实就可以看出他的滚磨作用了,Nested是嵌套的意思,而ToolBar基本需要嵌套使用。
[img]NestedScrollView使用和理解
NestedScrollView 即 支持嵌套滑动的 ScrollView 。
因此,我们可以简单的把 NestedScrollView 类比为 ScrollView ,其作用就是作为控件父布局,从而具备(嵌套)滑动功能。
NestedScrollView 与 ScrollView 的区别就在于 NestedScrollView 支持 嵌套滑动 ,无论是作为父控件还是子控件,嵌套滑动都支持,且默认开启。
因此,在一些需要支持嵌套滑动的情景中,比如一个 ScrollView 内部包裹一个 RecyclerView ,那么就会产生滑动冲突,这个问题就需要你自己去解决。而如果使用 NestedScrollView 包裹 RecyclerView ,嵌套滑动天然支持,你无需做什么就可以实现前面想要实现的功能了。
举个例子:
我们通常山宴迟为 RecyclerView 增加一个 Header 和 Footer 的方法是通过定义不同的 viewType来区分的,而如果使用 NestedScrollView ,我们完全可以把 RecyclerView 当成一个单独的控件,然后在其上面增加一个控件作为 Header,在其下面增加一个控件作为 Footer。
具体布局如下所示:
注: NestedScrollView 与 ScrollView 一样,内部只能容纳一个子控件。
效果如下所示:
ps: 虽然 NestedScrollView 内嵌 RecyclerView 和其他控件可以实现 Header 和 Footer,但还是不推荐上面这种做法(建议还是直接使用 RecyclerView 自己添加 Header 和 Footer),因为虽然 NestedScrollView 支持嵌套滑动,但是在实际应用中,嵌套滑动可能会带来其他的一些奇奇怪怪的副作用,Google 也推荐我们能不使用嵌套滑动就尽量不要使用。
如果想知道 NestedScrollView 嵌套其他控件可能带来的问题,可以查看: NestedScrollView、RecycleView、ViewPager 等布局方面的常见问题汇总,及解决
我们知道,Android 的事件分发机制中,只要有一个控件消费了事件,其他控件就没办法再接收到这个事件了。因此,当有嵌套滑动场景时,我们都需要自己手动解决事件冲突。而在 Android 5.0 Lollipop 之后,Google 官方通过 嵌套滑动机制 解决了传统 Android 事件分发无法共享事件这个问题。
嵌套滑动机制 的基本原理可以认为是事件共享,即当子控件接收到滑动事件,准备要滑动时,会先通知父控件( startNestedScroll );然后在滑动之前,会先询问父控件是否要滑动( dispatchNestedPreScroll );如果父控件响应该事件进行了滑动,那么就会通知子控件它具体消耗了多祥迹少滑动距离;然后交由子控件处理剩余的滑动距离;最后子控件滑动结束后,如果滑动距离还有剩余,就会再问一下父控件是否需要在继续滑动剩下的距离( dispatchNestedScroll )...
上面其实就是 嵌套滑动机制 的工作原理,那么如果想让我们自定义的 View 或者 ViewGroup 实现嵌套滑动功能,应该怎样做呢?
其实,在 Android 5.0 之后,系统自带的 View 和 ViewGroup 都增加了 嵌套滑动机制 相关的方法了(但是默认不会被调用,因此默认不具备嵌套滑动功能),所以如果在 Android 5.0 及之后的平台上,自定义 View 只要覆写相应的 嵌套滑动机制 相关方法即可;但是为了提供低版本兼容性,Google 官方还提供了两个接口,分别作为 嵌套滑动机制 父控件接口和子控件接口:
前面我们说过 NestedScrollView 无论是作为父控件还是子控件都支持嵌套滑动,就是因为它同时逗李实现了 NestedScrollingParent 和 NestedScrollingChild 。文档如下所示:
查看详细分析:
关于androidnestedscrollview和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。