2015-10-14 40 views

回答

1

您可以使用onScrollChanged(int l, int t, int oldl, int oldt)方法。由于不存在监听器的setter,但只是该方法,您将不得不创建自己的ScrollView类并重写该方法,并在您的实现中执行您的操作。

+0

我认为它只支持api版本23及以上版本 –

+1

不,从API级别1开始,只是检查提供的链接 – Ridcully

+0

只支持api版本23及以上版本 –

0
public class ObservableScrollView extends ScrollView { 
private static final int DEFAULT_THRESHOLD_DP = 4; 

private ScrollDirectionListener scrollDirectionListener; 
private int scrollThreshold; 

public ObservableScrollView(Context context) { 
    this(context, null); 
} 

public ObservableScrollView(Context context, AttributeSet attrs) { 
    this(context, attrs, 0); 
} 

public ObservableScrollView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    init(context); 
} 

private void init(Context context) { 
    scrollThreshold = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_THRESHOLD_DP, context.getResources().getDisplayMetrics()); 
} 

@Override 
protected void onScrollChanged(int x, int y, int oldX, int oldY) { 
    super.onScrollChanged(x, y, oldX, oldY); 

    if (Math.abs(y - oldY) > scrollThreshold && scrollDirectionListener != null) { 
     if (y > oldY) { 
      scrollDirectionListener.onScrollUp(Math.abs(y - oldY)); 
     } else { 
      scrollDirectionListener.onScrollDown(Math.abs(y - oldY)); 
     } 
    } 
} 

public void setScrollThresholdInPx(int px) { 
    scrollThreshold = px; 
} 

public void setScrollThresholdInDp(Context context, float dp) { 
    scrollThreshold = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); 
} 

public void setOnScrollDirectionListener(ScrollDirectionListener listener) { 
    scrollDirectionListener = listener; 
} 

public interface ScrollDirectionListener { 
    void onScrollDown(int pixels); 

    void onScrollUp(int pixels); 
}} 

得到回答:)使用该自定义滚动型

ScrollView.setOnScrollDirectionListener(new ObservableScrollView.ScrollDirectionListener() { 
     @Override 
     public void onScrollDown(int pixels) { 
      contenttool.setVisibility(View.INVISIBLE); 
     } 

     @Override 
     public void onScrollUp(int pixels) { 
      contenttool.setVisibility(View.VISIBLE); 
     } 
    }); 
+0

这正是我告诉你的 - 在ScrollView的自定义版本中覆盖'onScrollChanged()'。 – Ridcully

相关问题