如何确定垂直 ScrollView 的方向?

How can I determine the direction of a vertical ScrollView?

如何确定垂直 ScrollView 的方向? 我需要根据 scrollview scroll

隐藏和显示另一个线性布局

您可以使用 onScrollChanged(int l, int t, int oldl, int oldt) 方法。由于没有 setter 用于侦听器,只有那个方法,您将必须创建自己的 ScrollView class 并覆盖该方法并在您的实现中做您的事情。

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);
        }
    });