ScrollView不能像其他组件一样使用onScrollChanged()方法是因为它用protected封装了
- protected void onScrollChanged(int x, int y, int oldx, int oldy);
1:自定义组件
- public class ObservableScrollView extends HorizontalScrollView {
- private ScrollViewListener scrollViewListener = 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 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(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);
- }
2:使用监听
- horizontalScrollView.setScrollViewListener(new ScrollViewListener() {//滑动监听,获取图片
- @Override
- public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {
- int scrollX = scrollView.getScrollX();
- int width = scrollView.getWidth();
- int scrollViewMeasuredWidth = holder.imageSL.getChildAt(0).getMeasuredWidth();
- if ((scrollX + width) == scrollViewMeasuredWidth) {
- / System.out.println("滑动到了底部 scrollY=" + scrollX + "height=" + width + "scrollViewMeasuredHeight=" + scrollViewMeasuredWidth);
- }
- }
- });
附:
horizontalScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
}
});
这个可以获取每次滚动前和滚动后的坐标,但是这个要求sdk23,如果是之前的就得如上面自己重写horizontalScrollView。