Android中ScrollView实现滑动距离监听器的方法
前言
众所周知ScrollView是我们经常使用的一个UI控件,也许你在使用ScrollView的过程中会发现,当你想监听ScrollView滑动的距离时却没有合适的监听器!当然在API23中有setOnScrollChangeListener(View.OnScrollChangeListenerl)可以使用,但是并不兼容低版本的API。那怎么办呢?只好重写ScrollView来实现对滑动距离的监听了。
话不多说,直接上代码:
publicclassMyScrollViewextendsScrollView{ privateOnScrollListenerlistener; /** *设置滑动距离监听器 */ publicvoidsetOnScrollListener(OnScrollListenerlistener){ this.listener=listener; } publicMyScrollView(Contextcontext){ super(context); } publicMyScrollView(Contextcontext,AttributeSetattrs){ super(context,attrs); } publicMyScrollView(Contextcontext,AttributeSetattrs,intdefStyleAttr){ super(context,attrs,defStyleAttr); } //滑动距离监听器 publicinterfaceOnScrollListener{ /** *在滑动的时候调用,scrollY为已滑动的距离 */ voidonScroll(intscrollY); } @Override publicvoidcomputeScroll(){ super.computeScroll(); if(listener!=null){ listener.onScroll(getScrollY()); } } }
上面重写的MyScrollView是在computeScroll()实现监听,因为ScrollView内部是通过Scroller来实现的,当滑动的时候会去调用computeScroll()方法,从而达到监听的效果。
当然还有另一种方法,就是在onScrollChanged(intl,intt,intoldl,intoldt)去监听,最后的效果是一样的:
publicclassMyScrollViewextendsScrollView{ privateOnScrollListenerlistener; publicvoidsetOnScrollListener(OnScrollListenerlistener){ this.listener=listener; } publicMyScrollView(Contextcontext){ super(context); } publicMyScrollView(Contextcontext,AttributeSetattrs){ super(context,attrs); } publicMyScrollView(Contextcontext,AttributeSetattrs,intdefStyleAttr){ super(context,attrs,defStyleAttr); } publicinterfaceOnScrollListener{ voidonScroll(intscrollY); } @Override protectedvoidonScrollChanged(intl,intt,intoldl,intoldt){ super.onScrollChanged(l,t,oldl,oldt); if(listener!=null){ listener.onScroll(t); } } }
总结
以上就是这篇文章的全部内容了,希望能对各位Android开发者们有所帮助,如果有疑问大家可以留言交流。