我确实扩展了NestedScrollView和@重写它的方法:、onTouchEvent、和问题是super.onTouchEvent从不调用ACTION_DOWN (这是由我的onIntereceptTouchEvent调用的),因为NestedScrollView不移动,所以我得到了错误:
onTouchEvent中无效的pointerId=-1
当触发onTouchEvent时,指针id是在NestedScrollView的ACTION_DOWN方法中设置的。
mActivePointerId = MotionEventCompat.getPointerId(ev, 0);我无法亲自设置它,重写整个onTouchEvent方法似乎是痛苦的计划。这里可能需要帮助。当我单击“视图”(它不监听触摸事件)时,NestedScrollView确实会移动(基本上是这样,我的onInterecptTouchEvent方法没有被调用,ACTION_DOWN是在NestedScrollView onTouchEvent中处理的)。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.i(LOGTAG, String.valueOf(ev.getAction()));
final int action = MotionEventCompat.getActionMasked(ev);
if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
mIsBeingDragged = false;
Log.i(LOGTAG, "is scrolling" + String.valueOf(mIsBeingDragged));
return false; // Do not intercept touch event, let the child handle it
}
switch (action) {
case MotionEvent.ACTION_DOWN: {
mStartY = ev.getY();
break;
}
case MotionEvent.ACTION_MOVE: {
if (mIsBeingDragged) {
return true;
}
final int yDiff = calculateDistanceY(ev);
Log.d(LOGTAG, "y difference: y");
if (yDiff > mTouchSlop) {
mIsBeingDragged = true;
return true;
}
break;
}
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
Log.i(LOGTAG, "onTouchEvent");
if (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP) {
mIsBeingDragged = false;
}
return super.onTouchEvent(ev);
}发布于 2015-09-22 06:12:15
下面是解决我问题的代码,我不得不撒谎:
@Override
public boolean onTouchEvent(MotionEvent ev) {
Log.i(LOGTAG, "onTouchEvent");
if (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP) {
mIsBeingDragged = true;
}
if (mFirstOnTouchEvent) {
ev.setAction(MotionEvent.ACTION_DOWN);
ev.setLocation(mStartX, mStartY);
mFirstOnTouchEvent = false;
}
return super.onTouchEvent(ev);
}并在mFirstOnTouchEvent中触发ACTION_DOWN时,将onInterceptTouchEvent设置为真:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (MotionEventCompat.getActionMasked(ev) == MotionEvent.ACTION_DOWN) {
mFirstOnTouchEvent = true
}
...
}https://stackoverflow.com/questions/32699268
复制相似问题