Android中自带的ScrollView没有实现滚动的监听,而在开发中,我们经常要借助这个监听来实现一系列的操作。因此,我们需要自定义一个Scrollview来实现这个功能。
先上代码:
package com.lvtao.comewell.widget;
/***
* 功能强大的Scrollview
*/
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;
public class ScrollViewPlus extends ScrollView{
private ScrollViewListener scrollViewListener = null;
public ScrollViewPlus(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public ScrollViewPlus(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollViewPlus(Context context) {
super(context);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
public interface ScrollViewListener {
void onScrollChanged(ScrollViewPlus scrollView, int x, int y, int oldx, int oldy);
}
}
在这个自定义的Scrollview中,我们通过定义了一个ScrollViewListener接口来对ScrollView进行监听。在此接口中,通过重写onScrollChanged这个抽象方法来获取滑动的距离及状态并进行一系列的操作。
例如:
private ScrollViewPlus sv;
···
sv.setScrollViewListener(new ScrollViewListener() {
@SuppressLint("NewApi")
@Override
public void onScrollChanged(ScrollViewPlus scrollView, int x,int y, int oldx, int oldy) {
//y-->总滑动的距离
//oldy-->上一次滑动的距离<===>可以根据y与oldy的差值判断向上滑动还是向下滑动
sv.scrollTo(x, y);
}
});