众所周知, 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问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)