详解NestedScrollView滑动监听中的一些判断技巧

详解NestedScrollView滑动监听中的一些判断技巧,第1张

众所周知, ScrollView 与 NestedScrollView 都是用来滑动的控件,但是 ScrollView 没有提供滑动监听的接口,需要我们自己去实现,而 NestedScrollView 提供了一个 setOnScrollChangeListener 方法用来监听我们的滑动事件,此接口一共有5个参数,作用如下:

有人说,这还不简单,直接调用 NestedScrollViewgetMeasuredHeight() 不就可以了,然后与 scrollY 一除,滑动比就出来了,我只想说: too young too simple

事实上, NestedScrollViewgetMeasuredHeight() 获取的只是当前显示出来的一屏的测量高度(不包括未滑动出来的距离),真正的总高度应该调用 NestedScrollViewgetChildAt(0)getMeasuredHeight() 来获取, 需要注意,这是控件高度,不是滑动高度,不要傻白甜的用这个与scrollY 去除获取滑动比例 ,如果这样做的说明你对 scrollY 这个参数理解不够,这个参数是代表的滑动距离,在滑动之前已经是有一屏的距离了,所以它们之间的关系可以表示为:

需要注意的是,如果给 NestedScrollView 设置了padding,那么M还需要减去padding的数值

获取到了滑动百分比,我们就能用它来控制文字大小,位置,透明度等等,从而实现一些酷炫的效果

理解了滑动距离与总滑动长度之前的关系,这种判断还不是手到擒来

原理其实都一样

自动滑动到底部:

自动滑动到顶部:

滑动到某个位置

而位置的信息可以通过 viewgetTop(),viewgetBottom() 等方法获取控件的坐标信息,例如,滑动到指定view的上方:

1 通过webview的didFinishLoad:方法,这个时候webview已经加载完成,可以获得真实高度。

2 通过js来获取实际页面的高度,获取的时机也通过js来监听。

3 通过检测webViewscrollViewcontentSize,只要这个值发生改变,你马上就能够被通知。注册观察者的代码类似这样:

[webViewscrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew

context:&webViewContext]

然后在观察者中实现- (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void )context,你就随时可以监测到webView的高度变化了

用了webview作为富文本输入框,嵌套在scrollview里面发现没办法滚动起来,参考了下网上的资料,没找到好的结果,自己重写了下scrollview的onInterceptTouchEvent实现事件拦截,实现了webview能在固定高度下滚动起来

由于我是菜逼,没办法上传视频,只能发出GitHub的地址视频连接

WalleLibrary

以上就是关于详解NestedScrollView滑动监听中的一些判断技巧全部的内容,包括:详解NestedScrollView滑动监听中的一些判断技巧、如何获取webView的高度、Android下解决webView固定高度在scrollView问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9758689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存