监听ScrollView滑动方向

杜元明
2023-12-01

我们经常看到向上滑动列表的时候app的标题栏隐藏,向下滑动的时候标题栏又再次出现。这种效果我们怎么实现?

 

其实android的View类里面有一个方法

protected void onScrollChanged(int l, intt, int oldl, int oldt)

通过查询资料发现可以重写这个方法来监听列表的滑动方向。

下面我给出我针对ScrollView实现的监听类。


/**
 * 可以监听ScrollView的上下滑动 ,实现ScrollListener接口,调用setScrollListener(ScrollListener l)方法。
 * SCROLL_UP :ScrollView正在向上滑动 
 * SCROLL_DOWN :ScrollView正在向下滑动
 * @author xm
 */
public class ObservableScrollView extends ScrollView {

	private ScrollListener mListener;

	public static interface ScrollListener {
		public void scrollOritention(int oritention);
	}

	/**
	 * ScrollView正在向上滑动
	 */
	public static final int SCROLL_UP = 0x01;

	/**
	 * ScrollView正在向下滑动
	 */
	public static final int SCROLL_DOWN = 0x10;

	/**
	 * 最小的滑动距离
	 */
	private static final int SCROLLLIMIT = 40;

	public ObservableScrollView(Context context) {
		super(context, null);
	}

	public ObservableScrollView(Context context, AttributeSet attrs) {
		super(context, attrs, 0);
	}

	public ObservableScrollView(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
	}

	@Override
	protected void onScrollChanged(int l, int t, int oldl, int oldt) {
		super.onScrollChanged(l, t, oldl, oldt);

		if (oldt > t && oldt - t > SCROLLLIMIT) {// 向下
			if (mListener != null)
				mListener.scrollOritention(SCROLL_DOWN);
		} else if (oldt < t && t - oldt > SCROLLLIMIT) {// 向上
			if (mListener != null)
				mListener.scrollOritention(SCROLL_UP);
		}
	}

	public void setScrollListener(ScrollListener l) {
		this.mListener = l;
	}
}

我们可以实现ScrollListener来实现滑动时的操作。

 类似资料: