Как листать экран андроид

Управление жестами в Android 10: как включить и как использовать

Релиз Android 10 принёс множество новых функций и улучшений в мобильную операционную систему Google , но, пожалуй, наиболее спорными нововведениями являются функции управления жестами, которые полностью заменяют старый кнопочный дизайн.

Предполагается, что использование элементов управления на основе жестов облегчает навигацию по экранам и меню Android 10, особенно для телефонов с безрамочными экранами. Тем не менее, многим пользователям Android может потребоваться некоторое время, чтобы привыкнуть к новым функциям (если они активируют их).

Предлагаем вам краткий перечень всего того, что вам нужно знать о функциях управления жестами в Android 10: как включить их, как использовать для навигации и так далее.

Как включить управление жестами в Android 10

Если разобраться с системой управления жестами в Android 10 не так просто, то активировать её можно всего за четыре простых шага.

  • 1. Сначала тапните по иконке Настройки.
  • 2. Затем прокрутите список до пункта Система.
  • 3. Выберите пункт Жесты.
  • 4. Затем спуститесь вниз и тапните по пункту Навигация.
  • 5. Вы увидите три варианта: старая трёхкнопочная навигация в нижней части экрана, более новая, двухкнопочная по центру экрана и новая навигация с помощью жестов. Выберите Навигация жестами.
  • 6. Если вы, попробовав, решите, что она вам неудобна, всегда можно вернуться в это же меню и выбрать другой тип управления.

Список жестов управления в Android 10

Итак, теперь, когда вы отказались от привычных кнопок управления, давайте посмотрим, как вы можете использовать управление жестами для перемещения по экранам Android 10.

  • Домой: просто проведите пальцем вверх от нижней части экрана, и вы попадете на главный экран. Это работает везде, где бы вы ни находились – в любом приложении и на любом экране.
  • Назад: чтобы вернуться на предыдущую страницу или закрыть приложение или папку, просто проведите пальцем по левому или правому краю экрана.
  • Переключение между приложениями: если вы хотите переключиться с одного приложения на ранее использованное, проведите пальцем вверх и удерживайте его, а затем проведите пальцем влево или вправо. Это позволит вам быстро переключаться между любыми открытыми приложениями.
  • Страница многозадачности: вы можете просмотреть страницу задач в Android 10, на которой показаны все недавно использованные вами приложения, проведя пальцем вверх, а затем быстро нажав на экран.
  • Google Assistant: при отсутствии кнопки Home доступ к Google Assistant осуществляется с помощью элементов управления жестами, для чего нужно провести вниз по левому нижнему углу или правому нижнему углу экрана.

Доступ к меню приложений в Android 10

Если вы используете приложение в Android 10 с включенными элементами управления жестами, вы все равно можете получить доступ к стандартному меню приложений, расположенному слева. Один из способов — провести пальцем по экрану с левой стороны двумя пальцами, чтобы открыть меню. Другой способ, который более удобен при использовании телефона одной рукой — удерживать левый край экрана, чтобы меню частично появилось, а затем получить к нему полный доступ, проведя по меню пальцем.

Жесты Android 10 в различных смартфонах и лаунчерах

На данный момент новые функции управления жестами в Android 10 должны работать на тех смартфонах, на которых будет установлена стандартная версия ОС. Тем не менее, другие телефоны, которые имеют свои оболочки, такие как OneUI от Samsung, будут продолжать использовать собственные способы навигации.

Читайте также:  Яндекс электрички для android

По крайней мере, на данный момент, устройства, которые используют сторонние лаунчеры под Android 10, по умолчанию будут использовать старую 3-кнопочную навигационную систему. Представители Google отметили, что они работают над добавлением поддержки управления жестами для этих лаунчеров, но пока неизвестно, когда это произойдёт.

Источник

Custom View, скроллинг и жесты в Android на примере простого вьювера картинок

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

И так, начнем. Ми будем разрабатывать приложения для просмотра картинок. Готовое приложение выглядит так (хотя скриншоты, конечно, слабо передают функционал):

Установить приложение можно либо из Маркета, либо установив вручную отсюда. Исходный код доступен здесь.

Главным элементом нашего приложения является класс ImageViewer который мы и будем разрабатывать. Но нужно также отметить, что для выбора файла для просмотра я не стал изобретать велосипед и взял готовый «компонент» здесь.

Компонент представляет собой activity, который вызывается при старте из главного activity. После выбора файла, мы его загружаем и показываем на экране с помощью класса ImageViewer. Рассмотрим класс более подробно.

Класс является наследником класса View и переопределяет только один его метод onDraw. Также класс содержит конструктор и метод загрузки изображения:

Если мы загрузим картинку по размерам больше чем экран смартфона, то отобразится только часть ее и у нас не будет способа ее подвинуть или уменьшить.

Добавим теперь возможность скроллинга. Скроллинг по своей сути представляет собой жест, при котором пользователь дотрагивается пальцем к экрану, передвигает его не отрывая, и отпускает. Для того чтоб иметь возможность обрабатывать события связанные с тач-скрином, нужно переопределить метод onTouchEvent. Метод принимает один параметр типа MotionEvent и должен возвратить true в случае обработки события. Через этот метод можно реализовать поддержку любого жеста, включая скроллинг.
Для распознавания скроллинга нам нужно зафиксировать момент дотрагивания, перемещения и отпускания. К счастью нету необходимости делать это вручную так как в Android SDK есть класс делающий всю работу за нас. Таким образом для того чтоб распознать жест скроллинга, нужно добавить в наш класс поле типа GestureDetector которое инициализируется объектом реализующим интерфейс OnGestureListener (именно этот объект будет получать события скроллинга). Также нужно переопределить метод onTouchEvent в классе ImageViewer и передавать обработку событий из него в наш объект типа OnGestureListener. Измененный класс ImageViewer (без неизмененных методов) представлен ниже:

Как видно на самом деле ми наследуем MyGestureListener не от OnGestureListener, а от SimpleOnGestureListener. Последний класс просто реализует интерфейс OnGestureListener с помощью пустых методов. Этим мы избавляем себя от реализации всех методов, выбирая только те, что нужно.

Теперь если загрузить большую картинку, мы, по крайней мере, сможем скролить ее. Но: во первых мы можем проскроллить за рамки картинки, во вторых нету скроллбаров, которые бы подсказали нам где мы находимся и сколько еще осталось до краев.

Решим для начала вторую проблему. Поиск в Интернет приводит нас к тому, что нужно переопределить методы computeHorizontalScrollRange и computeVerticalScrollRange. Эти методы должны возвратить реальные размеры картинки (на самом деле есть еще методы которые имеют отношение к скроллбарам – это методы computeHorizontalScrollExtent, computeHorizontalScrollOffset и такая же пара для вертикального скроллбара. Если переопределить и их, то тогда возвращать можно более произвольные значения). Но этого оказывается недостаточно – скроллбары в первых нужно включить, во вторых проинициализировать. Включаются они методами setHorizontalScrollBarEnabled и setVerticalScrollBarEnabled, инициализируются методом initializeScrollbars. Но вот незадача – последний метод принимает немного непонятный параметр типа TypedArray. Этот параметр должен содержать в себе набор стандартных для View атрибутов. Список можно увидеть здесь в таблице «XML Attributes». Если бы мы создавали наш view из XML, Android runtime бы автоматически составил такой список. Но так как мы создаем класс программно, нужно также создать этот список программно. Для этого нужно создать файл attrs.xml в каталоге res\values с таким содержимым:

Читайте также:  Диагностика гбо 4 андроид

В файле просто перечислены все атрибуты, которые были указаны в таблице, упомянутой выше (кроме некоторых на которые указывает компилятор как на ошибку – видимо в документации список приведен самый последний). Измененный класс ImageViewer (кроме неизменных методов):

Не хотелось бы на этом останавливаться, поэтому давайте добавим поддержку жеста «бросок» (fling). Этот жест есть просто дополнение к жесту скроллинга, но учитывается скорость перемещения пальца в последние моменты (перед отпусканием), и если она не нулевая, скроллинг продолжается с постепенным затуханием. Поддержка этого жеста уже заложена в GestureDetector – поэтому нам нужно всего лишь переопределить метод onFling в классе MyGestureListener. Отловив это событие нам нужно еще некоторое время изменять положение скроллинга. Конечно, это можно сделать «вручную» с помощью таймеров или еще как, но опять же в Android SDK уже есть класс, реализующий нужный функционал. Поэтому нужно добавить в класс ImageViewer еще одно поле типа Scroller, которое и будет заниматься «остаточным» скроллингом – для старта скроллинга нужно вызвать его метод fling. Также нужно показать скроллбары (они ведь прячутся когда не нужны) вызовом метода awakenScrollBars. И последнее что нужно сделать – это переопределить метод computeScroll, который должен непосредственно делать скроллинг с помощью метода scrollTo (класс Scroller сам не занимается скроллингом – он просто работает с координатами). Код измененного класса ImageViewer представлен ниже:

В завершения разговора о жесте fling надо сделать одну мелочь – при прикосновении пальцем во время скроллинга от броска, нужно остановить скроллинг. На этот раз мы это сделаем «вручную» в методе onTouchEvent. Измененный метод представлен ниже:

Уже можно любоваться достаточно интересной физикой, но можно увидеть некоторые «глюки» при скроллинге за пределы картинки. Это происходит из-за того, что fling работает только в пределах картинки, а скроллинг без броска работает везде. Т.е. мы сможем выйти за рамки картинки только если очень плавно скролить (чтоб не срабатывал fling). Исправить этот «косяк» можно путем введения ограничение на обработку в метод onFling и обрабатывать бросок только если он не выходит за границы картинки. Измененный метод представлен ниже:

Теперь мы опять можем беспрепятственно скролить за рамки картинки. Кажется, эту проблему мы уже вспоминали… У нее есть элегантное решение, лежащее в том, что при отпускании пальца (при завершении скроллинга за рамками картинки) нужно картинку плавно вернуть в «положенное» место. И опять мы это сделаем «вручную» в методе onTouchEvent:

Вот теперь с уверенностью можно сказать что со скроллингом мы разобрались. Можем переходить к последнему жесту который хотелось бы реализовать – это жест pinch zoom.

Со стороны жест выглядит как растягивание или сжатие чего-то воображаемого на экране смартфона двумя пальцами. Пошагово жест происходит так: нажатие одним пальцем, нажатие вторым пальцем, изменение положения одного или двух пальцев не отпуская, отпускание второго пальца. Для определения величины масштабирования нужно вычислить соотношение между расстояниями между пальцами в момент начала жеста и в момент окончания жеста. Расстояние между пальцами находится по формуле sqrt(pow(x2 – x1, 2) + pow(y2 – y1, 2)). Также нужно отметить некоторое положение скроллинга которое нужно сохранять – ведь если жестом увеличить картинку, то положение скроллинга изменится (из-за измененного размера картинки). Это положение – а точнее точка, положение которой нужно сохранить, в терминологии Android SDK называется фокальной точкой, и находиться она посередине между двумя пальцами.
Реализовать жест как всегда можно самому, но и это к счастью уже реализовано в Android SDK (правда, только начиная с версии 2.2). Поможет в этом класс ScaleGestureDetector, инстанс которого добавим в наш класс. ScaleGestureDetector инициализируется обьектом, поддерживающим интерфейс OnScaleGestureListener, поэтому создадим также внутренний класс MyScaleGestureListener, который реализует методы onScaleBegin, onScale и onScaleEnd. Не забываем передать управление ScaleGestureDetector из метода onTouchEvent. Ну и самое главное – нужно как-то использовать данные масштабирования: их нужно учитывать во всех местах, где раньше фигурировали ширина и высота картинки (т.е. фактически нужно умножить эти параметры на коэффициент масштабирования). Финальный код класса ImageViewer можно посмотреть в исходниках.
На этом все. Надеюсь статься окажется полезной.

Читайте также:  Android медиаплеер или smart tv приставка супер

Источник

Расширенное управление жестами на Андроид: контролируем, не касаясь экрана

С появлением Samsung Galaxy S4 управление смартфонами Android «воздушными» жестами (Air Gestures) стало набирать популярность. В Galaxy S4 реализовано довольно много воздушных жестов, позволяющих снимать блокировку, принимать звонки или отклонять их, читать электронную почту, работать с интернет-сайтами и многое другое, без прикосновения к экрану. Но существуют специальные программы, позволяющие делать аналогичные вещи на других смартфонах Android(Air Call Accept, Magic Unlock и AirSwiper).

Hovering Controls является еще одним приложением, позволяющим осуществлять управление жестами на Андроид, не прикасаясь к экрану. Программа во многом имитирует функционал Air Gesture, реализованный в Galaxy S4. Следует отметить, что выполнение некоторых функций этой программы (смена фотографий в галерее, скроллинг в браузере) возможно только после получения прав root на Android. Эта программа также поддерживает жест для поднятия трубки без прикосновения к экрану. Можно с ее помощью управлять воспроизведением музыки и видео в проигрывателе, запускать приложения, переключаться между программами, открывать лаунчер.

Скачайте эту программу для управления жестами на Андроид и установите ее на свою трубку. После этого пройдите через запуск сервиса и укажите в настройках, какими программами хотите управлять «легким мановением руки». Эта разработка поддерживает три жеста: Hover Hold (удержание руки над трубкой), Slide Once (однократное проведение рукой над устройством), Slide Twice (двукратное проведение рукой над телефоном). Для каждого воздушного жеста вы можете задать свое приложение.

Вот основные возможности по управлению жестами на Андроид без рутирования с помощью Hovering Controls:

  • Выбор программ, которые запускаются с помощью каждого из жестов.
  • Временное отключение будильника.
  • Отключения звука входящего звонка.
  • Переключение между приложениями, запущенными последними.
  • Быстрый переход на домашний экран.
  • Обзор домашних экранов (как Quick Glance в Galaxy S4) или демонстрация экрана блокировки (по выбору пользователя).
  • Управление музыкальным проигрывателем (следующее / предыдущее / пауза / воспроизведение); работает даже при отключенном экране.
  • Включение / отключение динамика с помощью встряхивания трубки.

Если вы получите права root в системе, то возможности расширяются:

  • Все возможности управления с помощью жестов, описанные в предыдущем пункте.
  • Автоматическая съемка фотографий и видеороликов.
  • Разблокировка экрана посредством перемещения двух рук над трубкой. (Работает только в том случае, если не используются дополнительные функции безопасности для разблокировки экрана. Но это может быть решено в новых версиях.)
  • Смена фотографий в галерее (одно перемещение руки над трубкой — следующий снимок; два перемещения — предыдущий).
  • Прокрутка страницы в окне браузера (одно перемещение руки — вниз; два перемещения руки — вверх).
  • Ответ на входящий звонок простым приближением трубки к уху (это аналогично жесту удержания руки над устройством).

Источник

Оцените статью