Я схожу с ума здесь, пытаясь понять, почему я ничего не нахожу об этом и почему это не работает.
Я использую onFling для выполнения некоторых действий. Отлично работает. Но я хотел бы добавить onlongpress, который откроет контекстное меню. Тосты onlongpress тоже отлично работают. Но проблема возникает, когда я пытаюсь сделать registerForContextMenu. Если я даю свой linearlayout или любой из моих элементов в представлении, onlongpress вызывает отображение контекстного меню, но мой onfling больше не работает (вообще).
Поэтому я попытался зарегистрировать ForContextMenu только при длительном нажатии, а затем отменить регистрацию forcontextmenu (да, он существует, да, я тоже не думал, что он будет работать так: o)) но это не работает.
Итак, есть идеи, почему «registerForContextMenu» останавливает onfling?
Пожалуйста, скажите мне, если вам нужна часть кода.
С уважением Н
редактировать;
в моем oncreate я вызываю: registerForContextMenu (ivMain); //это изображение
gDetect = новый GestureDetector(это, новый GestureListener());
мой слушатель жестов:
public class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
openContextMenu(ivMain);//my imageview i used registerForContextMenu
}
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
// calculate the change in X position within the fling gesture
float horizontalDiff = event2.getX() - event1.getX();
// calculate the change in Y position within the fling gesture
float verticalDiff = event2.getY() - event1.getY();
float absHDiff = Math.abs(horizontalDiff);
float absVDiff = Math.abs(verticalDiff);
float absVelocityX = Math.abs(velocityX);
// float absVelocityY = Math.abs(velocityY);
if (absHDiff > absVDiff && absHDiff > flingMin && absVelocityX > velocityMin) {
// move forward or backward
if (horizontalDiff < 0) {
stuff();
return true;
}
} else {
otherstuff();
return true;
}
}
}
return false;
}
}