NestedScroll 相关接口:NestedScrollingParent, NestScrollingChild

顶层布局需要用CoordinatorLayout, Behavior 是CoordinatorLayout 内部类

public class CoordinatorLayout extends ViewGroup implements NestedScrollingParent2 {public static abstract class Behavior<V extends View> {}}  

NestedScroll 解决了子View 滑动时,父View需要滑动的情况, 子View 把需要滑动的距离传递给父View, 父View 可以消耗一部分距离,然后通知子View

子View滑动回调父View的接口:

   子View 父View
startNestedScroll   --开始滑动 onStartNestedScroll,onNestedScrollAccepted
dispatchNestedPreScroll  --预滑动 onNestedPreScroll
dispatchNestedScroll   --滑动 onNestedScroll
stopNestedScroll   --停止滑动 onStopNestedScroll

Behavior 是子View 与父View 之间协调者的角色, 父View的 事件它都有实现,在CoordinatorLayout 的方法实现中,都委托Behavior 进行处理。

@Overridepublic void onNestedScroll(View target, int dxConsumed, int dyConsumed,int dxUnconsumed, int dyUnconsumed) {

     // 遍历所有子Viewfor (int i = 0; i < childCount; i++) {final View view = getChildAt(i);if (view.getVisibility() == GONE) {// If the child is GONE, skip...continue;}final LayoutParams lp = (LayoutParams) view.getLayoutParams();if (!lp.isNestedScrollAccepted(type)) {continue;}final Behavior viewBehavior = lp.getBehavior();if (viewBehavior != null) {

        //委托给behavior进行处理viewBehavior.onNestedScroll(this, view, target, dxConsumed, dyConsumed,dxUnconsumed, dyUnconsumed, type);accepted = true;}}if (accepted) {onChildViewsChanged(EVENT_NESTED_SCROLL);}}

  

另外还有两个类:

NestedScrollingChildHelper辅助类
NestedScrollingParentHelper 辅助类

它们是为了适配Android 5.0 之前的版本

前面介绍了NestedScrollingParent, NestedScrollingChild, Behavior 三者之间的关系,下面看下嵌套滑动的常见实现:

1。 Toolbar+ 图片,图片滑动上去时,Toolbar显示

CoordinatorLayout + ToolbarLayout + CollapsingToolbarLayout + Toolbar

2.   Toolbar + TabLayout + ViewPager

转载于:https://www.cnblogs.com/songsh/p/6530024.html

Android 中 Behavior, NestedScrollingParent, NestedScrollingChild 关系相关推荐

  1. Android中使用Room时怎样存储带list集合的对象

    场景 Android中使用Room(ORM关系映射框架)对sqllite数据库进行增删改查: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  2. android context继承关系,android中Context深入详解

    以下分别通过Context认知角度,继承关系,对象创建等方面android中Context做了深入的解释,一起学习下. 1.Context认知. Context译为场景,一个应用程序可以认为是一个工作 ...

  3. android classloader的功能和工作模式,Android中ClassLoader和java中ClassLoader有什么关系和不同...

    一.Java中的ClassLoader是什么? 当写好一个Java应用程序,程序都是由若干个.class类文件组织而成的,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都 ...

  4. Android中的APK,TASK,PROCESS,USERID之间的关系

    开发Android已经有一段时间了,今天接触到底层的东西,所以对于进程,用户的id以及Android中的Task,Apk之间的关系,要做一个研究,下面就是研究结果: apk一般占一个dalvik,一个 ...

  5. Android中dp、sp、px、pt之间的换算关系

    Android中dp.sp.px.pt之间的换算关系 换算公式 1 dp = (dpi/160) px; 1 in = 72 pt = dpi dp; 1 pt = dpi/72 dp: 当dpi为1 ...

  6. ACL中的permit/deny与traffic policy中behavior的permit/deny之间是什么关系?

    ACL中的permit/deny与traffic policy中behavior的permit/deny之间是什么关系? ACL与traffic policy(流策略)经常组合使用.traffic p ...

  7. 关于openGL, openGL ES, openVG及android中2D调用关系的报告

    关于openGL, openGL ES, openVG及android中2D调用关系的报告 http://blog.chinaunix.net/u3/99423/showart_2203591.htm ...

  8. Android中的“Application”,“Task”,“Activities”的关系

    Android中的"Application","Task","Activities"的关系 什么是Android  Application? ...

  9. android中ADT和SDK的关系(转)

    ADT(Android Development Tools): 目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升 ...

最新文章

  1. python selenium p_Python爬虫(二十一)_Selenium与PhantomJS
  2. LeetCode Third Maximum Number
  3. flutter 导航页面转换动画效果
  4. Java笔记(十九) 反射
  5. oracle控制文件修复,oracle控制文件的损坏或完全丢失的恢复办法
  6. js如何查看元素类型
  7. S5PC100基于I2C子系统的lm75驱动流程图
  8. 布隆过滤器的原理、应用场景和源码分析实现
  9. iphone如何查看dns延迟_iPhone手机网速慢?1分钟教你设置DNS,网速立马翻一番
  10. 【MySQL】系统命令与基础查询
  11. spring boot中使用ehcache
  12. 华为Mate X即将于本月上市:5G实测下载速率超1Gbps
  13. 阿里全资收购饿了么,估值 95 亿美元
  14. VBF BETA 1.5 发布了
  15. 涂鸦赞助的500个开发套件,先到先得
  16. 软件测试周刊(第63期):凡是持久的,必是温和的与可持续的。
  17. 豆瓣电影top250信息爬取
  18. Oracle 常用脚本之查看视图、序列、存储过程、触发器、同义词、计划任务等信息
  19. 第22节 NAT——实现公私有IP地址转换
  20. Mysql数据库知识点归纳汇总

热门文章

  1. CentOs 6.3_64静默安装oracle11g_r2
  2. cacti 网络流量监测图形分析工具
  3. 新手如何学drupal?
  4. 有一段时间没来这里了,
  5. 贪心、递归、递推以及动态规划算法的分析与对比
  6. golang内置类型
  7. 简单而易忽视的http 404
  8. 从事嵌入式开发需要掌握哪些知识?从事嵌入式软件开发的前景如何?
  9. 嵌入式程序员面试时应该知道的16个问题
  10. 8.STM32中对ADC1_Config()函数(ADC1_GPIO_Config()和ADC1_Mode_Config())的理解(自定义)测试ADC转换电压值输出到终端上。