Детектор жестов и регистр ForContextMenu

Я схожу с ума здесь, пытаясь понять, почему я ничего не нахожу об этом и почему это не работает.

Я использую 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;
    }
}

person Hedi    schedule 20.08.2014    source источник
comment
где вы называете свой детектор?   -  person pskink    schedule 21.08.2014
comment
Привет. В моем onCreate я делаю gDetect = new GestureDetector(this, new GestureListener());   -  person Hedi    schedule 21.08.2014
comment
где вы вызываете gDetect.onTouchEvent()?   -  person pskink    schedule 21.08.2014
comment
после моей функции oncreate с '@Override public boolean onTouchEvent(MotionEvent event) { // TODO Автоматически сгенерированный метод-заглушка this.gDetect.onTouchEvent(event); вернуть super.onTouchEvent (событие); }'   -  person Hedi    schedule 21.08.2014
comment
что такое onTouchEvent? это метод View или Activity?   -  person pskink    schedule 21.08.2014
comment
он говорит, что переопределяет ontouchevent в действии (это пришло из учебника ранее сегодня)   -  person Hedi    schedule 21.08.2014
comment
попробуйте view.setOnTouchListener и вызовите сюда свой детектор   -  person pskink    schedule 21.08.2014
comment
Извините, я не понимаю, что вы имеете в виду (начиная с программирования). Что я должен установить вид?   -  person Hedi    schedule 21.08.2014
comment
попробуйте ivMain.setOnTouchListener   -  person pskink    schedule 21.08.2014
comment
Итак, кому я должен отправить файлы cookie? :) Это решило мою проблему. Большое спасибо!   -  person Hedi    schedule 21.08.2014
comment
кушайте сами, приятного аппетита   -  person pskink    schedule 21.08.2014


Ответы (1)


Как предположил pskink, мне нужно было удалить переопределение активности, связанное с касанием, и добавить onclicklistener к моему представлению и вместо этого вызвать мой детектор жестов.

ivMain.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            gDetect.onTouchEvent(event);
            //return super.onTouchEvent(event);
            return true;
 }
});

Большое спасибо pskink.

person Hedi    schedule 20.08.2014