Главная » Processing » Взаимодействие с тачскрином в Processing

0

Человек взаимодействует с устройством путем нажатия клавиш и касания тачскрина. В этом примере мы посмотрим, как определить, коснулся ли пользователь экрана и как запрограммировать реакцию на это воздействие в скетче. Мы сделаем небольшое приложение для рисования, а заодно посмотрим, как это делается.

Как это делается

Начнем с написания функции setup() и объявления логической переменной. Если значие переменной – истина, мы выведем что-нибудь на экран.

boolean touching = false;

void setup()

{

size( displayWidth, displayHeight ); smooth();

background( 0 );

}

Для ответа на касание мы задействуем метод surfaceTouchevent(). Если обнаружено касание, мы присвоим переменной touching значение true:

public boolean surfaceTouchEvent( MotionEvent event )

{

if ( event.getAction() == 2 ) { touching = true;

} else {

touching = false;

}

return super.surfaceTouchEvent( event );

}

В функции draw() мы добавим встроенные переменные mouseX, mouseY, pmouseX и

pmouseY для рисования кругов и линий, когда пользователь дотронется до экрана:

void draw()

{

if ( touching ) { stroke( 255, 128 ); noFill();

float d = dist( mouseX, mouseY, pmouseX, pmouseY ); float s = map( d, 0, 200, 1, 10 );

strokeWeight( s );

line( mouseX, mouseY, pmouseX, pmouseY ); fill( 255, 255, 0, 16 );

stroke( 0, 128 );

strokeWeight( 1 );

ellipse( mouseX, mouseY, motionPressure * 100, motionPressure * 100 );

}

}

Когда вы запустите скетч на своем устройстве, вы сможете рисовать на экране. Результат будет выглядеть так, как на этом скриншоте:

Как это работает

Ответ на события в режиме Android работает несколько иначе, чем в режиме Standard. На настольном компьютере мы можем программировать взаимодействие с клавиатурой и мышью. На мобильных устройствах эти функции недоступны. Для программирования ответа на события нужно применить функцию surfaceTouchEvent():

public boolean surfaceTouchEvent( MotionEvent event ) {}

В этой функции вы можете использовать все методы класса MotionEvent. Метод getAction() возвращает тип действия, совершенного на устройстве в виде целого числа. Если оно равно 2, то было касание:

if ( event.getAction() == 2 ) { touching = true;

} else {

touching = false;

}

Для того, чтобы убедиться, что все работает правильно, в последней строке функции вызовем метод super.surfaceTouchEvent():

return super.surfaceTouchEvent( event );

В функции draw() мы использовали переменную motionPressure для установки размера кругов. Эта переменная содержит площадь касания и обновляется только при касании экрана.

Дополнительно

В этом примере мы детектировали только одно касание. Большинство устройств Android поддерживают мультитач. Если вы хотите использовать мультитач, вот пример кода для доступа к данным с экрана. В функции surfaceTouchEvent() здесь отслеживается количество прикосновений с помощью вызова метода event.getPointerCount(). Если вы пройдетесь по этим указывающим объектам, вы легко получите координаты x и y и площадь касания. Код такой:

public boolean surfaceTouchEvent( MotionEvent event )

{

int numTouches = event.getPointerCount();

for ( int i = 0; i < numTouches; i++ ) { int touchID = event.getPointerId( i ); float x = event.getX( i );

float y = event.getY( i ); float r = event.getSize( i );

}

return super.surfaceTouchEvent( event );

}

Источник: Ян Вантомм, Processing 2: креативное программирование, перевод с английского Александры Мишутиной, Published by Packt Publishing Ltd., 2012, BIRMINGHAM – MUMBAI.

По теме:

  • Комментарии