前言
众所周知ScrollView是我们经常使用的一个UI控件,也许你在使用ScrollView的过程中会发现,当你想监听ScrollView滑动的距离时却没有合适的监听器!当然在API 23中有
setOnScrollChangeListener(View.OnScrollChangeListener l)
可以使用,但是并不兼容低版本的API。那怎么办呢?只好重写ScrollView来实现对滑动距离的监听了。
话不多说,直接上代码:
public class MyScrollView extends ScrollView {
private OnScrollListener listener;
public void setOnScrollListener(OnScrollListener listener) {
this.listener = listener;
}
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
// 滑动距离监听器
public interface OnScrollListener{
void onScroll(int scrollY);
}
@Override
public void computeScroll() {
super.computeScroll();
if(listener!=null){
listener.onScroll(getScrollY());
}
}
}
上面重写的MyScrollView是在
computeScroll()
实现监听,因为ScrollView内部是通过Scroller来实现的,当滑动的时候会去调用computeScroll()
方法,从而达到监听的效果。
当然还有另一种方法,就是在
onScrollChanged(int l, int t, int oldl, int oldt)
去监听,最后的效果是一样的:
public class MyScrollView extends ScrollView {
private OnScrollListener listener;
public void setOnScrollListener(OnScrollListener listener) {
this.listener = listener;
}
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public interface OnScrollListener{
void onScroll(int scrollY);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if(listener != null){
listener.onScroll(t);
}
}
}
总结
以上就是这篇文章的全部内容了,希望能对各位Android开发者们有所帮助,如果有疑问大家可以留言交流。
您可能感兴趣的文章:Android编程自定义View时添加自己的监听器示例Android实现检测手机摇晃的监听器Android编程之监听器用法实例分析Android编程之监听器的实现方法Android实现静态广播监听器的方法android Animation监听器AnimationListener的使用方法)Android控件系列之Button以及Android监听器使用介绍android监听器实例代码