什么情况下可以触发horizo​​ntalScrollView的onScrollChanged事件?

What situation can trigger horizontalScrollView's onScrollChanged event?

我对 Horizo​​ntalScrollView 有疑问。我已经覆盖 onScrollChanged 只看 x 滚动位置值。当我触摸屏幕并移动手指时,onScrollChanged 中的值是正确的。当我松开手指时,每个值在 logcat 中出现两次。在我的手指离开屏幕后,似乎有一个位置值触发了两次事件。

首先,我创建了一个从 Horizo​​ntalScrollView 扩展的 class 并覆盖了 onScrollChanged

public class MyHorizontalScrollView extends HorizontalScrollView {

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        Log.i("12345", String.valueOf(x) + " " + String.valueOf(oldx));
    }
}

总结: 当我触摸屏幕并移动时,每个值出现一次。 当我的手指离开屏幕后,每个值出现两次。 请帮我解决这个问题。我想知道第二个电话是哪里来的

这背后的原因是当MotionEvent.ACTION_UP动作事件触发时,onScrollChanged又被调用了。将这些方法添加到您的滚动视图以抑制该事件,这将解决您的问题。

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    return true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return event.getAction() == MotionEvent.ACTION_UP || super.onTouchEvent(event);
}