BuiltInZoom Android не работает в гибридном приложении - PullRequest
0 голосов
/ 26 мая 2020

Я разрабатываю гибридное приложение на Android, которое отображает HTML в WebView. Я хочу увеличить масштаб экрана путем сжатия пальцев, но BuiltInZoom не работает (не может увеличивать / уменьшать масштаб), когда я получаю событие касания на стороне JavaScript. Это происходит с Pixel 4 (Android 10), но он правильно работает с Pixel 3 (Android 9).

То, что я уже пробовал

  • Если я не нет события касания в JavaScript, я могу увеличивать и уменьшать масштаб.
  • Поскольку событие защемления вызывается в onScale, я могу получить текущий диапазон и применить его к onDraw.
  • Однако это нежелательно, потому что оно не отражает «максимальный масштаб» HTML «области просмотра». Я хочу управлять максимальным увеличением в соответствии с "окном просмотра".

Я получаю событие касания, как показано ниже.

view.addEventListener('touchstart', (e) => {
  console.log('touchstart');
});
view.addEventListener('touchmove', (e) => {
  console.log('touchmove');
});

Я установил BuiltInZoom на включение Android.

webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(true);
webView.getSettings().setSupportZoom(true);

Примечание

  • Это происходит с Pixel 4 (Android 10) и Galaxy Tab S4 (Android 9), но корректно работает с Pixel 3 (Android 9).
  • Я могу увеличивать масштаб, используя элементы управления масштабированием, но это уже устарело.
  • Я могу увеличивать масштаб после длительного нажатия на экран одним пальцем.
  • I можно увеличивать, помещая один палец на элемент, для которого я не получаю событие касания.
  • onScale вызывается всякий раз, когда я выполняю щипковое действие.
  • WebViewClient.onScaleChanged вызывается только тогда, когда его можно масштабировать .
  • Я изменяю «максимальный масштаб» HTML «области просмотра» динамически, потому что некоторые страницы разрешено увеличивать, а другие - нет.

1 Ответ

0 голосов
/ 29 мая 2020

Я могу увеличить, игнорируя ACTION_POINTER_DOWN в WebView.onTouchEvent. Но внезапно он увеличивается в основном из-за отсутствия позиции.

@Override
public boolean onTouchEvent(MotionEvent ev) {

    if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
        return false;
    }

    super.onTouchEvent(ev);

    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...