Захват сенсорных событий веб-просмотра Crosswalk Cordova

Я создаю веб-приложение для Android, используя Crosswalk Cordova framework, и я пытаясь зафиксировать любые сенсорные события, которые происходят в веб-просмотре XWalk в рамках основного действия моего приложения, но до сих пор все, что я пробовал, я не могу заставить сенсорные события запускаться во время сеансов отладки.

В частности, я пытаюсь зафиксировать движение тремя пальцами вниз в любом месте веб-представления, чтобы отобразить панель настроек.

Вот что у меня есть на данный момент в моей основной деятельности:

public class MyActivity extends CordovaActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.init();
        super.loadUrl(Config.getStartUrl());

        // appView is the main xwalk webview setup in parent
        appView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                // Check for three finger swipe... 
            }
        });
    }

    ....
}

Я понимаю, что, вероятно, мог бы поймать событие касания через события javascript, которые затем могли бы вызвать действие через вызов API-интерфейса Cordova, но я бы предпочел, чтобы эта логика была в приложении для Android.

Я также пытался захватывать события касания в методе onTouchEvent.

public boolean onTouchEvent(View view, MotionEvent event) {
    int action = event.getAction();
    // Check for three finger swipe... 
}

Но опять же, этот метод никогда не срабатывает.

Любая помощь или идеи будут высоко оценены.


person Brendan    schedule 30.01.2015    source источник


Ответы (1)


Мне удалось заставить это работать, переопределив метод dispatchTouchEvent, определенный в классе Activity. Это фиксировало событие касания и делегировало его моему веб-просмотру Cordova, даже не запуская мой onTouchEvent.

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    int action = ev.getAction();
    // handle three finger swipe

    super.dispatchTouchEvent(ev);
}

Я надеюсь, что это может помочь кому-то, кто столкнулся с этой проблемой :)

person Brendan    schedule 09.02.2015
comment
не могли бы вы помочь мне в обнаружении события прокрутки. - person Ranjithkumar; 19.05.2015
comment
Спасибо за ответ. Просто к вашему сведению, вам не хватает точки с запятой после dispatchTouchEvent(ev) :) - person HarshaXsoad; 20.03.2016