Entrada à caneta no Surface Duo

Os eventos de caneta do Android são tratados por meio da implementação do método onTouchEvent em sua classe View. O segredo para tornar seu aplicativo sensível ao toque é expandir a implementação de View para substituir onTouchEvent para escutar eventos de toque. O MotionEvent como um argumento relata detalhes de entrada da tela sensível ao toque para permitir que os usuários interajam com a tela usando uma caneta.

Seu código pode detectar que o usuário está usando uma caneta examinando o valor retornado do método MotionEvent.getToolType. Um valor de TOOL_TYPE_STYLUS indica uma caneta e TOOL_TYPE_ERASER indica uma caneta invertida com a borracha para baixo.

Pressão

Representa a pressão com a qual o usuário está usando a caneta. Geralmente é entre 0 e 1 (mas não é limitada pelo sistema); 0 indica pressão leve e 1 indica pressão forte.

O valor é obtido chamando o método getPressure ou chamando getAxisValue com o parâmetro AXIS_PRESSURE.

Orientation

O valor da orientação começa em 0 quando a caneta é mantida apontando para a parte superior da tela com a parte de borracha apontando para o usuário.

Quando a caneta for girada, os valores serão negativos se a caneta apontar para a esquerda (ponta da caneta à esquerda da borracha) e positiva ao apontando para a direita.

O valor é obtido chamando o método getOrientation ou chamando getAxisValue com o AXIS_ORIENTATION parâmetro.

O seguinte snippet de código detecta a orientação da caneta e desenha um arco na tela para corresponder a:

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

Botões

O método getButtonState retorna uma máscara de bits dos botões pressionados como BUTTON_STYLUS_PRIMARY e BUTTON_STYLUS_SECONDARY que representam os botões na caneta.

Exemplos