【发布时间】:2015-05-18 13:04:01
【问题描述】:
我正在尝试制作像滑动一样的收件箱以在列表视图中选择多个项目。我可以在主视图下显示一个视图,也可以拖动视图。问题是试图让 onTouch 和 onItemClickListener 一起工作。
1:如果我在 ACTION_DOWN 期间在 switch 案例中返回 true,则 onItemClickListener 将停止工作。如果我返回 false 则我无法拖动视图,但 onItemClickListener 正在工作。
2:在拖动视图时,listView 仍然可以滚动,这使得 onTouch 进入 ACTION_CANCEL
我将 onTouchListener 附加到适配器的 getView() 方法中的视图,如下所示:
root.setOnTouchListener(new MySwipeListener);
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
return false;
}
case MotionEvent.ACTION_MOVE: {
upX = event.getX();
float deltaX = downX - upX;
if (Math.abs(deltaX) > MIN_LOCK_DISTANCE && listView != null && !motionInterceptDisallowed) {
listView.onInterceptTouchEvent(event);
listView.requestDisallowInterceptTouchEvent(true);
motionInterceptDisallowed = true;
listView.requestDisallowInterceptTouchEvent(true);
}
if (deltaX > 0) {
holder.viewLeft.setVisibility(View.GONE);
} else {
// if first swiped left and then swiped right
holder.viewLeft.setVisibility(View.VISIBLE);
}
//holder.mainView.setTranslationX(-(int)deltaX);
if(deltaX < 0) {
holder.mainView.setTranslationX(-(int) deltaX);
}
return true;
}
case MotionEvent.ACTION_UP: {
upX = event.getX();
float deltaX = upX - downX;
if (Math.abs(deltaX) > MIN_DISTANCE) {
holder.mainView.setTranslationX(200);
} else {
holder.mainView.setTranslationX(0);
}
if (listView != null) {
listView.requestDisallowInterceptTouchEvent(false);
motionInterceptDisallowed = false;
}
holder.viewLeft.setVisibility(View.VISIBLE);
return false;
}
case MotionEvent.ACTION_CANCEL:{
holder.viewLeft.setVisibility(View.VISIBLE);
holder.mainView.setTranslationX(0);
return false;
}
}
return false;
}
【问题讨论】:
标签: android