检测ScrollView向上或向下滚动的方法 - Android

6

我有一个带有一个LinearLayout和若干个TextViewScrollView。我想要检测ScrollView向上或向下滚动以隐藏/显示ActionBar


没有直接的方法。也许这会对你有所帮助。https://dev59.com/xm865IYBdhLWcg3wLbar - Nazgul
4个回答

5
你需要创建一个继承 ScrollView 的类。
public class ExampleScrollView extends ScrollView 

接下来重写onScrollChanged方法,该方法会返回旧的和新的滚动位置,然后您可以从中检测出滚动的方向。

protected void onScrollChanged(int l, int t, int oldl, int oldt) 

1
那么我需要在XML文件中添加我的新ExampleScrollView,对吗? - KiKo
是的,返回完整的类路径,例如 com.my.app.ExampleScrollView - tyczj
我收到了错误信息: 自定义视图ExampleScrollView没有使用2个或3个参数的View构造函数;XML属性将无法工作。 - KiKo
嗯,是的,您必须实现所有适当的构造函数。 - tyczj

4

请看这个

scrollView.setOnTouchListener(new View.OnTouchListener() {
  float y0 = 0;
  float y1 = 0;

  @Override
  public boolean onTouch(View view, MotionEvent motionEvent) {

    if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
      y0 = motionEvent.getY();
      if (y1 - y0 > 0) {
        Log.i("Y", "+");
        AnimateFloat(true);
      } else if (y1 - y0 < 0) {
        Log.d("Y", "-");
        AnimateFloat(false);
      }
      y1 = motionEvent.getY();
    }

    return false;
  }
});

4
我觉得我来回答有点晚了,但这是我的答案。
 scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            float y = 0;

            @Override
            public void onScrollChanged() {
                if (scrollView.getScrollY() > y) {
                    Log.v("Message", "Scrolls Down");
                } else {
                    Log.v("Message", "Scrolls Up");
                }
                y = scrollView.getScrollY();
            }
        });

0
一个确定的简短回答
scroll.setOnScrollChangeListener(new View.OnScrollChangeListener() {
    @Override
    public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {


                int x = scrollY - oldScrollY;
                if (x > 0) {
                    //scroll up
                } else if (x < 0) {
                    //scroll down
                } else {

                }

    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接