首页 > 其他分享 >Android嵌套滑动NestedScrollingChild以及NestedScrollingParent处理流程

Android嵌套滑动NestedScrollingChild以及NestedScrollingParent处理流程

时间:2024-06-19 15:43:10浏览次数:22  
标签:NestedScrollingChild int NestedScrollingParent boolean dy ACTION Android public 

public interface NestedScrollingChild {
   
    public void setNestedScrollingEnabled(boolean enabled);
    
    public boolean isNestedScrollingEnabled();
 
    public boolean startNestedScroll(int axes);
 
    public void stopNestedScroll();
 
    public boolean hasNestedScrollingParent();
 
    public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow);
 
    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow);
 
    public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed);
 
    public boolean dispatchNestedPreFling(float velocityX, float velocityY);
}
 
public interface NestedScrollingParent {
   
    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes);
 
    public void onNestedScrollAccepted(View child, View target, int nestedScrollAxes);
 
    public void onStopNestedScroll(View target);
 
    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,  int dxUnconsumed, int dyUnconsumed);
 
    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed);
 
    public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed);
 
    public int getNestedScrollAxes();
}
 

从上边的方法能看出规律,每当NestScrollingChild调用对应的方法 就会在NestScrollingParent中回调对应的方法

这一系列的嵌套滑动操作事件来源于子View的onTouch事件中 ACTION_DOWN、ACTION_MOV、ACTION_UP

例如以RecyclerView作为子View

ACTION_DOWN:

child.startNestedScroll
childHelper.startNestedScroll
parent.onStartNestedScroll
parent.onNestedScrollAccept (此方法需要在parent.onStartNestedScroll返回true的时候才会去执行,可在此方法中获取一些值或者修改一些值

ACTION_MOVE : 

childHelper.dispatchNestedPreScroll(dy) 先将事件交给了parent处理 调用了下面方法
parent.onNestedPreScroll(dy)

consumedY = parent.onNestedPreScroll(dy)
 dy' = dy - consumeY 

最终剩下的位移,就由childRecyclerView内部消费了调用了scrollByInternal方法

recyclerView.scrollByInternal(dy')

最终发现 在scrollByInternal方法执行了child的dispatchNestedScroll

回调到
parent.onNestedScroll(unconsumeY)

还是先由parent消费之后 再由child去消费

 

ACTION_UP

childHelper.dispatchNestedPreFling
parent.onNestedPreFling
childHelper.dispatchNestedFling
parent.onNestedFling
child.stopNestedScroll

childHelper.stopNestedScroll
parent.onStopNestedScroll

 

标签:NestedScrollingChild,int,NestedScrollingParent,boolean,dy,ACTION,Android,public,
From: https://www.cnblogs.com/bimingcong/p/18256395

相关文章

  • 【Android面试八股文】SSL握手的过程都经历过什么?
    文章目录一、为什么要设计SSL/TLS?二、SSL/TLS的历史概述SSL(SecureSocketsLayer)TLS(TransportLayerSecurity)总结三、SSL/TLS加密过程中如何保证公钥不被篡改?公钥加密计算量太大,如何减少耗用的时间?3.1如何保证公钥不被篡改?3.2公钥加密计算量太大,如何......
  • 【Android面试八股文】谈谈你对TCP 流量控制与拥塞控制的理解
    文章目录一、流量控制1.1流量控制的概念1.2滑动窗口1.3零窗口二、拥塞控制2.1拥塞控制的概念2.2慢启动2.3拥塞避免2.4快重传与快恢复2.4.1快重传2.4.2快恢复三、总结TCP的拥塞控制和流量控制虽然采取的动作很相似,但拥塞控制与网......
  • 【Android面试八股文】你说一说什么是双亲委托机制?为什么需要双亲委托机制?
    一、双亲委托机制1.1双亲委托机制概述双亲委托机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器。如果父类加载器还存在父类加载器,则会一直向上委派,直至最终交由顶层的启动类加载器完成类加载,每个类加载器都是如此,只有在所......
  • Android 配置蓝牙遥控器键值
    文章目录篇头一、规格书二、红外按键配置三、蓝牙按键配置3.1查看设备号3.1.1方式一:dumpsysinput3.1.2方式二:cat/proc/bus/input/devices3.2配置kl文件3.2.1方案商原始配置3.2.2Generic.kl文件3.2.3重映射蓝牙按键3.2.4完成Vendor\_568a\_Product\_9869.kl......
  • android studio manifest结构关系
    <manifest><uses-permission/><permission/><permission-tree/><permission-group/><instrumentation/><uses-sdk/><uses-configuration/><uses-feature/>&......
  • 53.收官 Android四大组件之一服务
    服务一个长期运行在后台的用户组件不依赖于Activity只有当系统必须回收内存资源时才会被销毁首先是创建服务当写好后会自动在清单文件中注册服务的生命周期和启动方式先简单介绍一下然后用两个小案例来日志打印验证第一种启动方式startService()启动服务的组......
  • 52.Android四大名捕之一...四大组件之一广播
    广播(Broadcast)啥叫广播例如:电池电量低的时候会提醒电量不足这就是广播广播即在组件之间传递消息的机制Binder机制Binder机制作为Android系统中非常重要的一部分,为不同进程之间的数据共享和通信提供了高效、稳定的解决方案。开发者在Android开发中,可以通过Android提供的Bi......
  • Android 11 禁止从SD卡上安装第三方应用
    找到负责安装app的类:./frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java修改日志变量,打印日志,顺着日志看流程:publicstaticfinalbooleanDEBUG_INSTALL=true;05-2809:12:12.46241234184IPackageManager:init_copy:Install......
  • 谈一谈Android系统和iOS系统的点击实现复制功能
    序言:   谈到复制功能,想必大多数人都使用的navigator.clipboard.writeText()来实现对文本的复制。但是这个方法却只能在Android系统中成功复制到剪切板,在iOS系统中却不行,下面就谈谈iOS系统中的问题和实现方法。问题描述:iOS对用户数据和设备功能的访问有着严格的控制,尤其是......
  • Android 屏幕适配
    目录一、目的二、环境三、相关概念3.1屏幕尺寸(screensize)3.2屏幕分辨率(Resolution)3.3像素(pixel)3.4ppi3.5dpi3.6dp/dip3.7sp四、Q&A4.1为啥dpi=160?4.2为啥Android要引入dp概念?五、代码仓库地址六、参考资料一、目的        最近在调试一款设备,发现视......