OnLongPress не работает с нашими сенсорными событиями - PullRequest
0 голосов
/ 30 сентября 2018

Я разрабатываю игру, в которой я хочу выполнять определенные операции, когда пользователь нажимает на экран одним нажатием, и некоторые другие операции, когда пользователь долго нажимает на экран.Для этого я создал класс детектора жестов и добавил к ним события.

Класс представления поверхности

public MySurfaceView(Context context, IAttributeSet attrs):base(context, attrs)
    {
        this.context=context;
        SetWillNotDraw(false);
        gestureDetector = new GestureDetector(context, new GestureListener());

    }

 public override bool OnTouchEvent(MotionEvent e)
    {
        Log.Debug(Tag, "Inside" + System.Reflection.MethodBase.GetCurrentMethod().Name + "Method");
        return gestureDetector.OnTouchEvent(e); 
    }

Класс прослушивания жестов

  private class GestureListener : GestureDetector.SimpleOnGestureListener
    {
        public override bool OnDown(MotionEvent e)
        {
            Log.Debug("Tag", "Inside Gesture OnDown Event");
            // don't return false here or else none of the other 
            // gestures will work
            return true;

        }

        public override bool OnSingleTapConfirmed(MotionEvent e)
        {
            Log.Debug("Tag", "Inside Gesture OnSingleTapConfirmed Event");

            return true;
        }

        public override bool OnDoubleTap(MotionEvent e)
        {
            Log.Debug("Tag", "Inside Gesture OnDoubleTap Event");
            return true;
        }

        public override void OnLongPress(MotionEvent e)
        {
            Log.Debug("Tag", "Inside Long Press Event");
        }




    }

Все события, кроме OnLongPressработает с приведенным выше кодом.Прочитав комментарии к этому вопросу .Я должен вернуть false для события OnDown.После обновления моей базы кода на комментарии мое событие OnLongPress начало работать, но теперь работает только событие OnLongPress.

   public override bool OnDown(MotionEvent e)
        {
            Log.Debug("Tag", "Inside Gesture OnDown Event");
            // don't return false here or else none of the other 
            // gestures will work
            return false;

        }

Есть ли способ, с помощью которого я могу заставить OnLongPress работать с другими событиями, так как мне нужны все событияработать вместе.

1 Ответ

0 голосов
/ 04 ноября 2018

Измените OnTouchEvent на следующее:

 public override bool OnTouchEvent(MotionEvent e){
     Log.Debug(Tag, "Inside" + System.Reflection.MethodBase.GetCurrentMethod().Name + "Method");
     gestureDetector.OnTouchEvent(e); 
     return true;
}

Вы можете найти объяснение здесь .

...