Ввод с помощью пера на 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, которые представляют кнопки пера.