android - 在 ScrollView 项上设置 onClickListener 会禁用滚动效果

标签 android scrollview onclicklistener ontouchlistener

我有一个自定义 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/

相关文章:

java - Activity 和 Fragment 之间的通信以发送值

ios - 当键盘显示时移动 UITextFields

android - 以编程方式在(线性)布局(在 ScrollView 内)中添加 View

android - 如何使 EditText 像 Google keep 应用程序一样工作(平滑滚动且不被 ime 覆盖)?

jquery - 避免下面绝对定位元素上的点击事件

android - 加拿大的本地化默认为英国;应该默认为美国

android - 构建读/写应用程序是否需要用于 NFC 读/写器 acr122u 设备的 SDK?

android 传递在 View 剪辑边界之外绘制的 subview 的触摸事件(ViewPager 第 1 页到第 2 页)

java - OnClickListener 只执行一次

java - 如何使对话框中的整个 View 可点击?