我有自定义的scrollview,我正在应用touchListener,因为我想在屏幕上上下拖动它。在这个scrollview中,我有一些附加了clickListener的子项。
我的问题是,当试图点击这些项目时,它不会发生任何事情。我想问题是触摸监听器以某种方式干扰了点击监听器,但我不知道该怎么办。
这是我的自定义滚动视图:
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();
}
}
同样在我的活动中,我为这个滚动视图添加了一个触摸监听器,因为正如我所说,我需要向上/向下移动滚动视图。
您能否告诉我如何触发点击监听器并保持触控效果? 谢谢!
答案 0 :(得分:2)
我记得,它是一系列事件。
首先触发onTouch,通过onTouch监听器。
如果任何侦听器返回true,则表示触摸已处理,并且不会发送onClick。
如果所有侦听器都返回false,那么系统会认为onTouch没有被处理,当点击完成时,onClick将被触发。
您可能想要检查自触摸开始以来用户滚动了多少,如果滚动量很小,则返回false。