Ввод с помощью пера на Surface Duo

События пера в Android обрабатываются путем реализации метода onTouchEvent в классе View. Чтобы обеспечить интерактивность приложения при сенсорном вводе, вам нужно расширить реализацию View с переопределением onTouchEvent для прослушивания событий касания. MotionEvent в качестве аргумента сообщает сведения о вводе с сенсорного экрана, благодаря чему пользователи могут взаимодействовать с экраном с помощью пера.

Ваш код может определить, что пользователь использует перо, получив значение, возвращаемое методом MotionEvent.getToolType. Значение TOOL_TYPE_STYLUS означает использование пера, а TOOL_TYPE_ERASER — использование ластика на другом конце пера.

Давление

Представляет давление, с которым пользователь нажимает на перо. Обычно оно имеет значение в диапазоне от 0 до 1 (но не ограничивается системой). 0 означает легкое давление, а 1 — сильное.

Это значение можно получить, вызвав метод getPressure или вызвав метод getAxisValue с параметром AXIS_PRESSURE.

Orientation

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

При вращении пера значения будут отрицательными, если перо указывает влево (кончик пера левее ластика), и положительными, если перо указывает вправо.

Значение можно получить, вызвав метод getOrientation или вызвав метод getAxisValue с параметром AXIS_ORIENTATION.

В следующем фрагменте кода определяется ориентация пера и рисуется на экране соответствующая дуга:

float orientation = ((event.getOrientation() * 57.2958f) + 90 ) % 360 ;
canvas.drawArc(oval,orientation,5.0f,true,paint);

Кнопки

Метод getButtonState возвращает битовую маску нажатых кнопок, таких как BUTTON_STYLUS_PRIMARY и BUTTON_STYLUS_SECONDARY, которые представляют кнопки пера.

Примеры