如何确定垂直ScrollView的方向?

时间:2015-10-14 10:49:42

标签: android scrollview direction

如何确定垂直ScrollView的方向? 我需要隐藏并显示另一个符合滚动视图滚动的线性布局

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

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