【问题标题】:Get scrolling direction in a scrollview?在滚动视图中获取滚动方向?
【发布时间】:2019-10-15 22:21:59
【问题描述】:

这应该很简单,但似乎我错过了一些东西 --- 你如何确定 ScrollView 的滚动事件的方向(左/右/上/下)?

首先想到的是存储getScrollX()和getScrollY(),然后在下次调用onTouchListener时比较它们。这是正确的做事方式吗?

我正在实现一个自定义的 Horizo​​ntalScrollView,我只需要在一个方向上禁用滚动和页面滑动。

【问题讨论】:

    标签: android


    【解决方案1】:

    研究告诉我,这种情况没有滚动监听器。
    你可以试试你的方法。
    我会尝试的另一件事是覆盖onScrollChanged(它提供之前的滚动位置),然后创建自己的 ScrollView

    更新
    这个对我有用。它向右滚动,但不向左滚动。

    public class CustomScrollView extends HorizontalScrollView {
    
        public CustomScrollView(Context context) {
            super(context);
        }
    
        public CustomScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        @Override
        public void onScrollChanged(int w, int h, int ow, int oh) {
            if (w < ow) {
                scrollTo(ow, h);
            }
        }
    }
    

    【讨论】:

    • 不,我的方法不起作用。 ACTION_DOWN 没有被捕获。它与 Horizo​​ntalScrollView 作为 ViewGroup 有关。现在试试你的方法。根据 ViewGroup 文档,它可能比覆盖 onInterceptOnTouchEvent 和 onTouchEvent 更简单。
    • 成功了吗?那是你要找的吗?如果是这种情况,请评价
    • 是的,我真的很喜欢这种方法。它简短、简单且有效。它也适用于 onTouchListener ---我正在覆盖它以实现“捕捉”滚动视图。另一种方法是覆盖 onInterceptListener 和 onTouchListener ......这是一个复杂的舞蹈。我打算发布示例代码,但你打败了我。谢谢
    【解决方案2】:

    使用这个

      scrollView.setOnTouchListener(new View.OnTouchListener() {
      float y1 = 0;
      float y0 = 0;
    
      @Override
      public boolean onTouch(View view, MotionEvent motionEvent) {
    
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
          y0 = motionEvent.getY();
          Log.i("Y", motionEvent.getAction() + " + " + (y0 - y1));
        } else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
          y1 = motionEvent.getY();
          if (y0 - y1 > 0) {
            Log.i("Y", motionEvent.getAction() + " + " + (y0 - y1));
          } else if (y0 - y1 < 0) {
            Log.e("Y", motionEvent.getAction() + " - " + (y0 - y1));
          }
        }
    
        return false;
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多