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开发者们有所帮助,如果有疑问大家可以留言交流。