Android监听ScrollView滑动距离
辉son 人气:4使用ScrollView时,有时候我们需要要获取它滑动的距离,Android的API给我们提供了设置监听的方法:
scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() { @Override public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { } });
很遗憾的是:Call requires API 23
点进去看下View里面的OnScrollChangeListener在哪个方法里面监听位置:
/** * This is called in response to an internal scroll in this view (i.e., the * view scrolled its own contents). This is typically as a result of * {@link #scrollBy(int, int)} or {@link #scrollTo(int, int)} having been * called. * * @param l Current horizontal scroll origin. * @param t Current vertical scroll origin. * @param oldl Previous horizontal scroll origin. * @param oldt Previous vertical scroll origin. */ protected void onScrollChanged(int l, int t, int oldl, int oldt) { notifySubtreeAccessibilityStateChangedIfNeeded(); if (AccessibilityManager.getInstance(mContext).isEnabled()) { postSendViewScrolledAccessibilityEventCallback(); } mBackgroundSizeChanged = true; if (mForegroundInfo != null) { mForegroundInfo.mBoundsChanged = true; } final AttachInfo ai = mAttachInfo; if (ai != null) { ai.mViewScrollChanged = true; } if (mListenerInfo != null && mListenerInfo.mOnScrollChangeListener != null) { mListenerInfo.mOnScrollChangeListener.onScrollChange(this, l, t, oldl, oldt); } }
一看其实实现不难,不就是自定义个ScrollView, 里面多写个监听, 实现如下:
import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; /** * Created by hucanhui on 16/7/28. */ public class ObservableScrollView extends ScrollView{ private OnScollChangedListener onScollChangedListener = null; public ObservableScrollView(Context context) { super(context); } public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public void setOnScollChangedListener(OnScollChangedListener onScollChangedListener) { this.onScollChangedListener = onScollChangedListener; } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if (onScollChangedListener != null) { onScollChangedListener.onScrollChanged(this, x, y, oldx, oldy); } } public interface OnScollChangedListener { void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); } }
使用简单:
scrollView.setOnScollChangedListener(new ObservableScrollView.OnScollChangedListener() { @Override public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy){ } });
加载全部内容