我的情况是我的ViewPager包含3个ListFragments。每个ListFragment当然都包含ListView。我有项目的自定义布局。我想要实现的是当我按下& hold项时,新片段以当前动画之上的动画开始。我想在用户发布项目后立即停止动画(删除片段)。我已将其实现为onTouchListner(下面的代码)。麻烦的是,当我按下项目时,我能够滚动ListView。我想阻止这一点。
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
touchDownTime = event.getDownTime();
mDownX = event.getX();
mDownY = event.getY();
isOnClick = true;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (isOnClick
&& fragment
.isAnimation()) {
if (!fragment.isReleased()) {
fragment
.cancelAnimation();
} else {
fragment
.startReleaseAnimation();
}
}
break;
case MotionEvent.ACTION_MOVE:
if (isOnClick
&& !fragment
.isAnimation()
&& (Math.abs(mDownX - event.getX()) > SCROLL_THRESHOLD || Math
.abs(mDownY - event.getY()) > SCROLL_THRESHOLD)) {
isOnClick = false;
} else if (event.getEventTime() - touchDownTime > 150
&& !fragment
.isAnimation()) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction
.add(R.id.container,
fragment)
.addToBackStack(null).commit();
}
break;
default:
break;
}
return true;
}
});
答案 0 :(得分:7)
您应该尝试requestDisallowInterceptTouchEvent
这样可以防止拦截触摸事件
试试这个
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
// Your code
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
getParent().requestDisallowInterceptTouchEvent(false);
// Your code
break;
default:
break;
}
return true;
}
});