我在实现类似Instagram预览图像功能方面遇到麻烦(在长按显示对话框的长按对话框中)。所以我有Fragment
作为其子的ViewPager
。负责将数据馈送到Adapter
的{{1}}具有一个带有ViewPager
的imageView。该侦听器具有onTouchListener
,用于检测gestureDetector
和onDoubleTap
。现在的事情是,我希望onLongPress
在父onLongPress
中使Dialog
膨胀,并且在发布时我希望解散Fragment
。但是出于某种原因,Dialog
或MotionEvent.ACTION_UP
从未在pagerAdapter中被调用,我猜想Dialog正在拦截这些动作,这实在令人沮丧,我几天都无法实现。 MotionEvent.ACTION_CANCEL
系统的工作方式。这是代码:
PagerAdapter:
TouchEvent
片段:
private class MyOnTouchListener implements View.OnTouchListener {
private GestureDetector gestureDetector = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e)
listener.performSomeAction();
return super.onDoubleTap(e);
}
@Override
public void onLongPress(MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
listener.setZoomLayout(imageUri);
break;
case (MotionEvent.ACTION_UP):
listener.hideZoomLayout();
break;
case MotionEvent.ACTION_CANCEL:
listener.hideZoomLayout();
break;
}
super.onLongPress(e);
}
});
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (view.getId()) {
case R.id.ivSelectedImg1:
gestureDetector.onTouchEvent(event);
return true;
case R.id.ivSelectedImg2:
gestureDetector.onTouchEvent(event);
return true;
case R.id.ivSelectedImg3:
gestureDetector.onTouchEvent(event);
return true;
case R.id.ivSelectedImg4:
gestureDetector.onTouchEvent(event);
return true;
default: return false;
}
}
}
不要了解如何防止Dialog接管MotionEvent。我的意思是,我什至不确定该事件是否已在对话框中捕获,看起来好像已消失。在此先多谢!