gpt4 book ai didi

android - 附加 onTouchListener 后 ScrollView 不闪烁

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:02 25 4
gpt4 key购买 nike

我有一个 ScrollView,它有一个 ViewTreeObserver.OnScrollChangedListener,这不是问题,但是一旦我设置 OnTouchListener 来确定 ScrollView 何时停止滚动, ScrollView 上的 throw Action 就不会再发生。这是我的代码:

如果我这样做,它实际上并没有运行我为 onTouch 事件所拥有的方法,并且仍然会发生 throw :

@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
horizontalScrollClipping((ScrollView)view, view.getScrollY());
return false; //returning false instead of true
}
return false;
}

如果我这样做,onTouch 事件中的方法将被触发,但 ScrollView 不会发生:

@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
horizontalScrollClipping((ScrollView)view, view.getScrollY());
return true; //returning true instead false
}
return false;
}

最后,如果我这样做,ScrollView 上的滚动将被完全禁用:

@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
horizontalScrollClipping((ScrollView)view, view.getScrollY());
return true; //return true for both
}
return true;
}

这里是触摸事件中显示的 horizo​​ntalScrollClipping 方法:

private void horizontalScrollClipping(ScrollView scrollView, int scrollY) {
if (scrollY > (image.getHeight() * 0.60)) {
scrollView.smoothScrollTo(0, image.getHeight());
}
}

只是想知道是否有人可以告诉我为什么在附加 OnTouchListener 并返回 true 时禁用 ScrollView 的默认 throw 操作,以及为什么我返回时 OnTouch 事件中的方法没有触发错误的。在此先感谢,非常感谢任何帮助。

编辑:因此,我没有检查用户是否在 onTouch 界面期间完成了滚动,而是像这样计算了用户是否在 OnScrollChangedListener 中完成了滚动:

scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
int scrollY = scrollView.getScrollY();
if ((scrollY - lastScrollY) < 5 && (scrollY - lastScrollY) > 0) {
horizontalScrollClipping((ScrollView)scrollView, scrollY);
}
lastScrollY = scrollY;
}
});

其中 lastScrollY 是在我的类顶部初始化的变量设置为 0。

最佳答案

如果您从 onTouch 返回 true,则表明您已经处理了该事件,并且没有其他监听器应该尝试处理它。如果我不得不猜测 ScrollView 也是该 onTouch 方法的监听器,当您返回 true 时,ScrollView 的 onTouch 永远不会被调用,因为您的方法处理了该事件。

关于android - 附加 onTouchListener 后 ScrollView 不闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29810612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com