Android 功能强大的Scrollview

时间:2021-11-20 19:48:25

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);

}
});