package com.yuyh.library.view.list; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.ScrollView; /** * 到达顶部或底部触发事件的ScrollView * * @author yuyh. * @date 16/4/10. */ public class BorderScrollView extends ScrollView { private OnBorderListener onBorderListener; private View contentView; public BorderScrollView(Context context) { super(context); } public BorderScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public BorderScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); doOnBorderListener(); } /** * 须调用改方法设置监听 * * @param onBorderListener */ public void setOnBorderListener(final OnBorderListener onBorderListener) { this.onBorderListener = onBorderListener; if (onBorderListener == null) { return; } if (contentView == null) { contentView = getChildAt(0); } } /** * OnBorderListener,滚动到顶部或底部的监听 */ public interface OnBorderListener { void onBottom(); void onTop(); } private void doOnBorderListener() { if (contentView != null && contentView.getMeasuredHeight() <= getScrollY() + getHeight()) { if (onBorderListener != null) { onBorderListener.onBottom(); } } else if (getScrollY() == 0) { if (onBorderListener != null) { onBorderListener.onTop(); } } } }