【发布时间】:2015-04-22 23:13:12
【问题描述】:
我有一个 ScrollView,它有一个 ViewTreeObserver.OnScrollChangedListener,这不是问题,但是一旦我设置 OnTouchListener 来确定 ScrollView 何时停止滚动,滚动视图上的投掷动作就不会再发生了。这是我的代码:
如果我这样做,它实际上并没有运行我为 onTouch 事件提供的方法,并且仍然会发生抛出:
@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 事件中的方法会触发,但不会发生滚动视图的投掷:
@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;
}
这里是 Touch Event 中显示的 HorizontalScrollClipping 方法:
private void horizontalScrollClipping(ScrollView scrollView, int scrollY) {
if (scrollY > (image.getHeight() * 0.60)) {
scrollView.smoothScrollTo(0, image.getHeight());
}
}
只是想知道是否有人能告诉我为什么当附加 OnTouchListener 并返回 true 时滚动视图的默认投掷动作被禁用,以及为什么我在 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。
【问题讨论】:
标签: android ontouchlistener android-scrollview