扣丁学堂教您入门操作android的嵌套滚动

2018-07-13 14:36:15 514浏览

嵌套滚动在android操作中是google为我们提供一种新特性。从某种角度看可以理解为嵌套滚动是逆向的事件传递机制,接下来扣丁学堂小编就给大家讲讲详细的操作方法及其原理,感兴趣的小伙伴赶紧来围观吧。

原理如上图所示。那么下边我们从代码的层面看一下实现。

代码中主要涉及到了四个类:

NestedScrollingChild、NestedScrollingChildHelper、NestedScrollingParent、NestedScrollingParentHelper

先看NestedScrollingChild接口中定义的方法:

publicinterfaceNestedScrollingChild{

/**

*设置是否启用嵌套滚动

*/

publicvoidsetNestedScrollingEnabled(booleanenabled);

/**

*判断是否启用嵌套滚动

*/

publicbooleanisNestedScrollingEnabled();

/**

*开始嵌套滚动

*@paramaxes标识方向,有x,y方形和默认值0

*/

publicbooleanstartNestedScroll(intaxes);

/**

*嵌套滚动结束

*/

publicvoidstopNestedScroll();

/**

*判断父view是否支持嵌套滚动

*/

publicbooleanhasNestedScrollingParent();

/**

*分发嵌套滚动,一般再onTouch/onInterceptTouchEvent/dispatchTouchEvent中调用

*@paramdxConsumedx轴滚动的距离

*@paramdyConsumedy轴滚动的距离

*@paramdxUnconsumedx轴上未消费的距离

*@paramdyUnconsumedy轴上未消费的距离

*@paramoffsetInWindow子View的窗体偏移

*/

publicbooleandispatchNestedScroll(intdxConsumed,intdyConsumed,

intdxUnconsumed,intdyUnconsumed,int[]offsetInWindow);

/**

*滚动之前调用,进行分发预滚动事件

*/

publicbooleandispatchNestedPreScroll(intdx,intdy,int[]consumed,int[]offsetInWindow);

/**

*滑动时调用,分发滑动事件

*/

publicbooleandispatchNestedFling(floatvelocityX,floatvelocityY,booleanconsumed);

/**

*滚动之前调用,分发预滚动事件

*/

publicbooleandispatchNestedPreFling(floatvelocityX,floatvelocityY);

}

NestedScrollingParent接口中的方法均是与NestedScrollingChild中的方法一一对应的:

publicinterfaceNestedScrollingParent{

publicbooleanonStartNestedScroll(Viewchild,Viewtarget,intnestedScrollAxes);

publicvoidonNestedScrollAccepted(Viewchild,Viewtarget,intnestedScrollAxes);

publicvoidonStopNestedScroll(Viewtarget);

publicvoidonNestedScroll(Viewtarget,intdxConsumed,intdyConsumed,

intdxUnconsumed,intdyUnconsumed);

publicvoidonNestedPreScroll(Viewtarget,intdx,intdy,int[]consumed);

publicbooleanonNestedFling(Viewtarget,floatvelocityX,

floatvelocityY,booleanconsumed);

publicbooleanonNestedPreFling(Viewtarget,floatvelocityX,floatvelocityY);

publicintgetNestedScrollAxes();

}

以上两个类仅仅是定义了功能接口,真正的实现的代码都包含在了NestedScrollingChildHelper和NestedScrollingParentHelper中。

处理流程:

1、当NestedScrollingChild(下文用Child代替)要开始滑动的时候会调用onStartNestedScroll,然后交给代理类NestedScrollingChildHelper(下文ChildHelper代替)的onStartNestedScroll请求给最近的NestedScrollingParent(下文Parent代替).

2、当ChildHelper的onStartNestedScroll方法返回true表示同意一起处理Scroll事件的时候时候,ChildHelper会通知Parent回调onNestedScrollAccepted做一些准备动作

3、当Child要开始滑动的时候,会先发送onNestedPreScroll,交给ChildHelper的onNestedPreScroll请求给Parent,告诉它我现在要滑动多少距离,你觉得行不行,这时候Parent根据实际情况告诉Child现在只允许你滑动多少距离.然后ChildHelper根据onNestedPreScroll中回调回来的信息对滑动距离做相对应的调整.

4、在滑动的过程中Child会发送onNestedScroll通知ChildeHelpaer的onNestedScroll告知Parent当前Child的滑动情况.

5、当要进行滑行的时候,会先发送onNestedFling请求给Parent,告诉它我现在要滑行了,你说行不行,这时候Parent会根据情况告诉Child你是否可以滑行.

6、Child通过onNestedFling返回的Boolean值来觉得是否进行滑行.如果要滑行的话,会在滑行的时候发送onNestedFling通知告知Parent滑行情况.

7、当滑动事件结束就会child发送onStopNestedScroll通知Parent去做相关操作.

以上就是本文的全部内容,希望对大家在学习android的道路上起到更大的帮助,也希望大家可以更多关注扣丁学堂,了解更多详情,请登录扣丁学堂官网咨询,或者关注微信公众号,里面有最新的扣丁学堂android教学资讯以及大量精品Android在线视频教程等你来看!大家一起来扣丁集思广益吧~

扣丁学堂微信公众号



【关注微信公众号获取更多学习资料】



查看更多关于“Android开发技术的相关资讯>>


标签: android在线视频 android培训视频 android入门操作

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号