【问题标题】:How can I determine the direction of a vertical ScrollView?如何确定垂直 ScrollView 的方向?
【发布时间】:2015-10-14 10:49:42
【问题描述】:

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

【问题讨论】:

标签: android scrollview direction


【解决方案1】:

您可以为此使用onScrollChanged(int l, int t, int oldl, int oldt) 方法。由于没有用于侦听器的设置器,而只有该方法,因此您必须创建自己的 ScrollView 类并覆盖该方法并在您的实现中执行您的操作。

【讨论】:

  • 我认为它只支持api版本23及以上
  • 不,它从 API 级别 1 开始就存在,只需检查提供的链接
  • 只支持api 23及以上版本
  • 你从哪里得到的?点击我建议的链接,在右侧你会看到“Added in API level 1”。
【解决方案2】:
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);
        }
    });

【讨论】:

  • 这正是我告诉你的——在自定义版本的 ScrollView 中覆盖“onScrollChanged()”。
猜你喜欢
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
相关资源
最近更新 更多