监听ScrollView滑动方向

我们经常看到向上滑动列表的时候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来实现滑动时的操作。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要判断一个ScrollView滑动是否到底部,可以通过监听ScrollView滑动事件进行判断。具体步骤如下: 1. 首先,获取ScrollView的滚动位置。可以通过scrollView的getScrollY()方法获取到当前ScrollView垂直方向滚动的距离。 2. 接下来,通过scrollView的getHeight()方法获取到ScrollView的高度。 3. 再使用scrollView.getChildAt(0).getHeight()方法获取到ScrollView中第一个子控件的高度。 4. 判断滑动的距离是否等于ScrollView中第一个子控件的高度减去ScrollView的高度,即getScrollY() == scrollView.getChildAt(0).getHeight() - scrollView.getHeight()。 上述判断的条件成立时,说明ScrollView已经滑动到了底部。可以通过监听ScrollView滑动事件,在滑动事件的监听回调中进行判断。如果条件成立,则说明已经滑动到底部。 示例代码如下: scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { @Override public void onScrollChanged() { int scrollY = scrollView.getScrollY(); //垂直方向滑动的距离 int childHeight = scrollView.getChildAt(0).getHeight(); //ScrollView中第一个子控件的高度 int scrollViewHeight = scrollView.getHeight(); //ScrollView的高度 //判断是否滑动到底部 if (scrollY == childHeight - scrollViewHeight) { //已经滑动到底部,做相应操作 } } }); 通过监听ScrollView滑动事件并进行相应判断,即可判断ScrollView滑动是否到底部。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值