如何确定垂直 ScrollView 的方向?

Posted

技术标签:

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

我需要根据滚动视图滚动隐藏和显示另一个线性布局

【问题讨论】:

看看this。 【参考方案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()”。

以上是关于如何确定垂直 ScrollView 的方向?的主要内容,如果未能解决你的问题,请参考以下文章

Scrollview总结:滑动问题监听Scrollview实现头部局改变

SwiftUI ScrollView 垂直和水平滚动

如何在特定位置将视图添加到 ScrollView?

无论手机方向如何,都获得垂直于重力方向的加速度。

SwiftUI - 如何获取 ScrollView 内容的大小(高度)

Android入门第20天-Android里的ScrollView的使用