2013-01-15 53 views

回答

2

是的,但首先您必須重寫Horizo​​ntalScrollView類並提供您自己的偵聽器。由於某些原因,SDK不會讓您直接訪問OnScrollChanged監聽器。

執行以下操作:

public class FixedScrollView extends HorizontalScrollView 
{ 
    private ScrollViewListener scrollViewListener = null; 

    public FixedScrollView(Context context) 
    { 
     super(context); 
    } 

    public FixedScrollView(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
    } 

    public FixedScrollView(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(FixedScrollView scrollView, int x, int y, int oldx, int oldy); 
    } 
} 

然後你就可以在你的代碼中使用此像這樣:

FixedScrollView scrollView = (FixedScrollView) findViewById(R.id.scroller); 

設置onScrollChangeListener:

scrollView.setScrollViewListener(scrollerChanged); 

然後做好以下聽衆檢測邊緣:

ScrollViewListener scrollerChanged = new ScrollViewListener() 
    { 

     @Override 
     public void onScrollChanged(FixedScrollView scrollView, int x, int y, int oldx, int oldy) 
     { 
      int maxScrollX = scrollView.getChildAt(0).getMeasuredWidth() - scrollView.getMeasuredWidth(); 

      if (scrollView.getScrollX() == 0) 
      { 
       //Left side 
      } 
      else if (scrollView.getScrollX() == maxScrollX) 
      { 
       //Right side 
      } 
      else 
      { 
       //Neither left nor right 
      } 
     } 
    };