ScrollView的滑动监听(以HorizontalScrollView为例)

ScrollView不能像其他组件一样使用onScrollChanged()方法是因为它用protected封装了

[java]  view plain  copy
  1. protected void onScrollChanged(int x, int y, int oldx, int oldy);  
想要实现监听需要简单自定义组件.

1:自定义组件

[java]  view plain  copy
  1. public class ObservableScrollView extends HorizontalScrollView {  
  2.   
  3.     private ScrollViewListener scrollViewListener = null;  
  4.   
  5.     public ObservableScrollView(Context context) {  
  6.         super(context);  
  7.     }  
  8.   
  9.     public ObservableScrollView(Context context, AttributeSet attrs,  
  10.                                 int defStyle) {  
  11.         super(context, attrs, defStyle);  
  12.     }  
  13.   
  14.     public ObservableScrollView(Context context, AttributeSet attrs) {  
  15.         super(context, attrs);  
  16.     }  
  17.   
  18.     public void setScrollViewListener(ScrollViewListener scrollViewListener) {  
  19.         this.scrollViewListener = scrollViewListener;  
  20.     }  
  21.   
  22.     @Override  
  23.     protected void onScrollChanged(int x, int y, int oldx, int oldy) {  
  24.         super.onScrollChanged(x, y, oldx, oldy);  
  25.         if (scrollViewListener != null) {  
  26.             scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);  
  27.         }  
  28.     }  
  29.   
  30. }  

接口:

[java]  view plain  copy
  1. public interface ScrollViewListener {  
  2.     void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);  
  3. }  

2:使用监听

[java]  view plain  copy
  1. horizontalScrollView.setScrollViewListener(new ScrollViewListener() {//滑动监听,获取图片  
  2.                @Override  
  3.                public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {  
  4.                    int scrollX = scrollView.getScrollX();  
  5.                    int width = scrollView.getWidth();  
  6.                    int scrollViewMeasuredWidth = holder.imageSL.getChildAt(0).getMeasuredWidth();  
  7.                    if ((scrollX + width) == scrollViewMeasuredWidth) {  
  8. /                        System.out.println("滑动到了底部 scrollY=" + scrollX + "height=" + width + "scrollViewMeasuredHeight=" + scrollViewMeasuredWidth);  
  9.                    }  
  10.                }  
  11.            });  

附:

        horizontalScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            }
        });

这个可以获取每次滚动前和滚动后的坐标,但是这个要求sdk23,如果是之前的就得如上面自己重写horizontalScrollView。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值