我有一个自定义 ScrollView ,我正在应用一个 touchListener,因为我想在屏幕上上下拖动它。同样在此 ScrollView 中,我有一些附加了 clickListener 的子项。
我的问题是,当尝试点击项目时,它没有发生任何事情。我想问题是触摸监听器以某种方式干扰了点击监听器,但我不知道该怎么办。
这是我的自定义 ScrollView :
public class ObservableScrollView extends ScrollView {
private Callbacks mCallbacks;
private boolean enableScrolling = true;
public boolean isEnableScrolling() {
return enableScrolling;
}
public void setEnableScrolling(boolean enableScrolling) {
this.enableScrolling = enableScrolling;
}
public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (mCallbacks != null) {
mCallbacks.onScrollChanged(t);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(isEnableScrolling() && mCallbacks!=null){
return super.onTouchEvent(ev);
}
else{
return false;
}
}
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY)
{
//This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance;
super.onOverScrolled( scrollX, scrollY, clampedX, clampedY);
}
@Override
public int computeVerticalScrollRange() {
return super.computeVerticalScrollRange();
}
public void setCallbacks(Callbacks listener) {
mCallbacks = listener;
}
public static interface Callbacks {
public void onScrollChanged(int scrollY);
public void onDownMotionEvent();
public void onUpOrCancelMotionEvent();
}
另外,在我的 Activity 中,我已将触摸监听器附加到此 ScrollView ,因为正如我所说,我需要向上/向下移动 ScrollView 。
你能告诉我如何触发点击监听器并保持触摸效果吗? 谢谢!
最佳答案
我记得,它是一系列事件。
首先触发 onTouch,通过 onTouch 监听器。
如果任何一个监听器返回true,就意味着触摸已经被处理,不会发送onClick。
如果所有的监听器都返回false,则系统认为onTouch没有被处理,当点击完成时,会触发onClick。
您可能想检查自触摸开始以来用户滚动了多少,如果滚动量很小,则返回 false。
关于android - 在 ScrollView 项上设置 onClickListener 会禁用滚动效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800202/